是否可以将元素直接强制转换为数组

本文关键字:转换 数组 元素 是否 | 更新日期: 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 
    }
}