【问题标题】:c# how to use a template in a get property?c#如何在get属性中使用模板?
【发布时间】:2019-11-07 11:03:28
【问题描述】:

我在 c# 的 get 属性中使用模板时遇到了一些问题。下面的类没有问题:

public class test
{
    public T GetDefault<T>()
    {
        return default(T);
    }
}

但是我想使用get属性然后出现错误

意外使用通用名称

代码如下:

public class test
{
    public T Default<T> => default<T>;
}

【问题讨论】:

    标签: c# templates properties get


    【解决方案1】:

    到目前为止,C# 中还没有泛型属性。你可以找到详情herehere

    我们必须为通用属性的后备存储预留空间 [...]。但我们不知道要预留多少。 即使编译器已经阅读并理解了 通用的。

    MSDN 声明here

    属性是字段的自然扩展。两者都被命名为成员 与关联类型。

    它们必须在编译时具有关联的类型。

    【讨论】:

      【解决方案2】:

      我认为当前的 C# 版本不支持这种语法糖。但是你可以得到类似这样的行为:

      public static class test<T>
      {
          public static T Default => default(T);
      }
      

      然后使用它:

      var value = test<int>.Default;
      

      实际上,如果您在两者之间挣扎,我建议您留在方法:

      public static class test
      {
          public static T GetDefault<T>() => default(T);
      }
      

      好处是您可以将不同的扩展放在同一个测试类中,放在不同的类型上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多