C# 字符串插入与可选参数混淆

发布于 2024-07-21 00:07:31 字数 417 浏览 2 评论 0原文

我对 C# 相当陌生,试图找出字符串插入(即 "some {0} string", toInsert),并遇到了一个我没有预料到的问题

...有两个构造函数的情况:

public MyClass(String arg1) { ... }

public MyClass(String arg1, String arg2) { ... }

我可以使用第一个构造函数进行字符串插入吗?

...
toInsert = "def"
myClass = new MyClass("abc{0}ghi", toInsert)
...

或者 C# 会将其解释为第二个构造函数并传递文字 "abc{0}ghi" 作为第一个参数?

I'm fairly new to C#, and trying to figure out string insertions (i.e. "some {0} string", toInsert), and ran across a problem I wasn't expecting...

In the case where you have two constructors:

public MyClass(String arg1) { ... }

public MyClass(String arg1, String arg2) { ... }

Is it possible for me to use the first constructor with a string insertion?

...
toInsert = "def"
myClass = new MyClass("abc{0}ghi", toInsert)
...

Or will C# interpret this as the second constructor and pass a literal "abc{0}ghi" as the first argument?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

姜生凉生 2024-07-28 00:07:31

是的,这将被解释为只是第二个参数。

您描述的行为称为字符串格式化,并且接受这种样式的字符串的所有内容都在后台使用 string.Format() 。 有关详细信息,请参阅该方法的文档。

要获得所需的行为,请使用以下代码:

myClass = new MyClass(string.Format("abc{0}ghi", toInsert));

Yes, this will be interpreted as just a second parameter.

The behavior you describe is called string formatting and everything that accepts strings in this style uses string.Format() in the background. See the documentation of that method for details.

To get the desired behavior, use this code:

myClass = new MyClass(string.Format("abc{0}ghi", toInsert));
唔猫 2024-07-28 00:07:31

做就是了:

public MyClass(string format, params object[] args)
{
  this.FormattedValue = string.Format(format, args);
}

Just do:

public MyClass(string format, params object[] args)
{
  this.FormattedValue = string.Format(format, args);
}
夏雨凉 2024-07-28 00:07:31

或者 C# 会将其解释为
第二个构造函数并传递一个文字
“abc{0}ghi”作为第一个参数?

这是正确的答案。
我认为如果您使用 String.Format("abc{0}ghi", toInsert) 那么它将采用第一个构造函数

Or will C# interpret this as the
second constructor and pass a literal
"abc{0}ghi" as the first argument?

This is the right answer.
I think If you use String.Format("abc{0}ghi", toInsert) then it will take the first constructor

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文