是否可以将元素直接强制转换为数组
本文关键字:转换 数组 元素 是否 | 更新日期: 2023-09-27 17:58:37
有没有办法将T
的单个对象强制转换为T[]
在将单个string
传递给需要string[]
的函数时,可以使用此方法
示例
void ExistingMethod(string[] sa);
void main()
{
string s;
ExistingMethod(s); //<= problem is there a syntax that allows this type of cast?
}
对像这样的解决方案不感兴趣
string [] singleElementArray = new string[1];
singleElementArray[0] = s;
ExistingMethod(singleElementArray)
我想看看C#是否允许这种类型的铸造。
我想我看到了Java允许它的一种方式,只需像([s])
一样用[]包装它。C#有这种语法吗?
注意,对创建一个1的数组并分配它不感兴趣…
将foo(string[] sa)
更改为foo(params string[] sa)
。
params
允许您放置一个采用数组参数数组的数组,如下所示:foo(foo, bar, baz);
而不是foo(new[]{foo, bar, baz});
或者您可以执行.Arr<T>(this T obj)
函数,该函数返回一个T[]
。类似这样的东西:
public static T[] Arr<T>(this T obj)
{
return new[]{ obj };
}
然后像这样使用:
foo(obj.Arr());
没有强制转换,但您可以使用动态创建数组
string s = "blah";
foo(new [] { s });
C#有以下语法:
foo(new[] { s });
不,单个字符串不是字符串数组,因此将其强制转换为数组是没有意义的。你可以在这里做的最简单的事情是:
void foo(string[] sa);
void main()
{
string s = "some value"; // A string must have a value before you can use it
foo(new[]{ s });
}
由于您在注释中声明foo()是库的一部分,不能修改,并且假设foo(。
Bar类中foo()的原始实现示例:
class Bar {
public void foo(string[] s) {
foreach (var s1 in s) {
Console.WriteLine(s1);
}
}
}
你的foo()扩展:
static class BarExtensions {
public static void foo(this Bar bar, string s) {
bar.foo(new[] {s});
}
}
您的示例调用,修改为使用外部类:
class Program {
static void Main() {
var bar = new Bar();
string s = "hello";
bar.foo(s); // This is how you wanted to call it
}
}