从T到T []的隐式或显式转换

Jim*_*ffa 4 .net c# generics

有没有办法为任何事物的数组实现通用的隐式或显式转换器,如下所示:

public static implicit operator T[](T objToConvert)
{
    return new T[] { objToConvert };
}
Run Code Online (Sandbox Code Playgroud)

dri*_*iis 7

不,我能想到的最接近的是扩展方法:

public static T[] AsArray<T>(this T instance) 
{
    return new T[]{instance};
}
Run Code Online (Sandbox Code Playgroud)

用于:

var myArray = myInstnace.AsArray();
Run Code Online (Sandbox Code Playgroud)

  • 这种事情是一把双刃剑.一方面,拥有可以执行此操作的通用方法可能很有用 - 尤其是在与LINQ等库一起使用时,有时您希望将各个元素轻松地视为序列.另一方面,它可能会很痛苦,因为像这样的通用扩展方法会出现在Intellisense中的每种类型,并且可能会让其他开发人员感到困惑.它也容易被滥用.一般而言,保守创建全球适用的扩展方法是一件好事.关于'AsArray` - 我在围栏上. (3认同)

Dan*_*ant 7

请注意,您可以省略数组构造函数中的类型名称,这意味着语法相当干净,即使使用长类型名称:

ReallyLongAndAwkwardTypeName value;
MethodThatTakesArray(new[] {value}); 
Run Code Online (Sandbox Code Playgroud)