当前位置:  开发笔记 > 编程语言 > 正文

测试泛型类型是字符串的最佳方法是什么?(C#)

如何解决《测试泛型类型是字符串的最佳方法是什么?(C#)》经验,为你挑选了2个好方法。

我有一个泛型类,应该允许任何类型,原始或其他.唯一的问题是使用default(T).在值类型或字符串上调用default时,它会将其初始化为合理的值(例如空字符串).调用default(T)对象时,它返回null.由于各种原因,我们需要确保如果它不是基本类型,那么我们将有一个类型的默认实例,而不是 null.这是尝试1:

T createDefault()
{
    if(typeof(T).IsValueType)
    {
        return default(T);
    }
    else
    {
        return Activator.CreateInstance();
    }
}

问题 - 字符串不是值类型,但它没有无参数构造函数.那么,目前的解决方案是:

T createDefault()
{
    if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
    {
        return default(T);
    }
    else
    {
        return Activator.CreateInstance();
    }
}

但这感觉就像一块垃圾.有没有更好的方法来处理字符串案例?



1> Matt Hamilto..:

请记住,default(string)为null,而不是string.Empty.您可能需要在代码中使用特殊情况:

if (typeof(T) == typeof(String)) return (T)(object)String.Empty;


我以为我之前尝试过这个解决方案并且没有用,但我一定做了些蠢事.并且感谢指出默认(字符串)返回null,我们没有因为它而遇到错误,但这是真的.
那么`is`关键字怎么样?这不是用的吗?

2> FlySwat..:
if (typeof(T).IsValueType || typeof(T) == typeof(String))
{
     return default(T);
}
else
{
     return Activator.CreateInstance();
}

未经测试,但首先想到的是.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有