繁体   English   中英

c# 如何在获取属性中使用模板?

[英]c# how to use a template in a get property?

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

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

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

意外使用通用名称

代码如下:

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

到目前为止,C# 中没有通用属性。 您可以在此处此处找到详细信息:

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

MSDN 在这里声明:

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

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

我认为当前的 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);
}

好处是您可以在不同类型的同一测试 class 中放置不同的扩展。

如果您想使其通用,则应将通用类型传递给 class,如下所示

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

调用它

var defaultValue = new test<TheType>.Default;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM