c# - 隐式转换为 IEnumerable<T>

标签 c# c#-4.0 generics ienumerable implicit-conversion

我有一个类用于保存从配置文件加载的值。为了使这个类更易于使用,我设置了许多到一些基本类型的隐式转换。

我想转换成的类型之一是 IEnumerable(T)。例如,如果程序员在配置文件中有这样的值

a = "1,2,3,4"

在C#代码中,他可以写

IEnumerable<int> a = Config.a;

理想情况下我想写的是这个

    public static implicit operator IEnumerable<T>(ConfigurationValue val)
    {
        string value = val;

        string[] parts = value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

        List<T> convertedTypes = new List<T>();

        foreach (string part in parts)
        {
            T converted = Convert.ChangeType(part.Trim(), typeof(T));
            convertedTypes.Add(converted);
        }

        return convertedTypes;
    }

但这给我带来了 T 未定义的语法错误。没有办法定义这样的转换还是有特殊的语法?

另请注意,我在 .Net Framework 4.0 中使用 C# 4.0

最佳答案

But this is giving me syntax errors that T is undefined. Is there no way to define such a conversion or is there a special syntax for it?

您正在尝试声明一个泛型运算符 - 而这在 C# 中不受支持。 (不知道IL是否支持。)构造函数、属性、事件和终结器也是如此。

基本上,只有方法和类型可以是泛型的。

编辑:如评论中所述,我会改为编写通用方法。用户定义的转换 - 特别是隐式转换 - 应该非常谨慎地使用,IMO。

关于c# - 隐式转换为 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192836/

相关文章:

c# - 在 ASP.NET Core 3.1 Web 应用程序中获取 "Unrecognized SameSiteMode value -1"InvalidOperationException

Silverlight 4 的 ListView 控件?

c# - 如何从两个相似但不同的方法中创建一个泛型方法?

java - 如何在 Java 中编写方法签名 "T that implements Comparable<T>"?

c# - 异步模式下 StandardOutput 流的问题

c# - 如何隐藏 DataGridView 的网格线?窗体 C#

c# - 在异步方法中省略异步和等待

mysql - 如何在C#和MySQL中根据今天的日期检索日期记录

c# - 方法的类型推断,具有泛型和类继承

swift - 无法为泛型类型的子类调用初始值设定项