c# - 测试泛型类型是否为字符串的最佳方法? (C#)

标签 c# generics

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

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

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

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

但这感觉就像是一场混战。有没有更好的方法来处理字符串大小写?

最佳答案

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

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

关于c# - 测试泛型类型是否为字符串的最佳方法? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31498/

相关文章:

C#.NET : Read CSV using % converter

c# - 使用 ASP.NET Web API 将 yyyy-MM-dd 形式的日期查询参数反序列化为 noda time LocalDate 对象

c# - 如何在代码隐藏中设置 Validation.ErrorTemplate?

c# - 当类是通用的时找不到 Web API Controller

java - 将对象数组向下转换为类型参数数组

c# - 从 Func<object,string> 到 Func<string,string> 的转换有效,但到 Func<int,string> 失败

c# - 使用 ClickOnce 部署的应用程序启动缓慢

c# - EF Core 返回空关系,直到直接访问

generics - F# 代码引用和泛型函数

c# - 为什么类型转换给出 CS0030,而 "as"有效?