【问题标题】:Type conversion from T to string and from string to T, where T is known to be string从 T 到字符串以及从字符串到 T 的类型转换,其中 T 已知为字符串
【发布时间】:2014-09-09 12:25:01
【问题描述】:

我有

public bool AddParameter<T>(string pattern, SqlDbType parameterType, int length, T value)
{
}

我需要一个字符串的特殊情况,它应该被截断(MS 不会对我这样做,我不知道他们需要的第一手长度)。所以我尝试用我的最终结果查询T是否为字符串

if(value is string) {
}

等待一些测试。现在我需要在value 上做一些类型转换来做字符串函数,因为

 value = value.Substring(0,length);

不起作用。所以我试了一下:

value = (T)(((string)value).Substring(0,length));

但是从 T 到字符串的转换是不可能的。我猜 value.ToString() 会产生相同的结果,所以我再次尝试:

 value = (T)((value.ToString()).Substring(0,length);

但从字符串到 T 的转换也是不可能的。有人能帮我走出迷宫吗?

【问题讨论】:

  • 您真的要提供一个修改参数的AddParameter&lt;T&gt; 方法吗?这些东西很容易被遗忘。
  • 是的,我想要。但是我在代码中添加了以下非常重要的行:dbg.Warn("Truncated "+pattern+" to "+length+" characters.");。当一半的行仅用于调试目的时,部署的代码更易于维护。 :D

标签: c# string type-conversion


【解决方案1】:

双重施法应该可以解决问题

 value = (T)(object)(value.ToString().Substring(0,length));

【讨论】:

    【解决方案2】:

    如果已知 T 是字符串,为什么还要使用泛型?您必须添加一个接受字符串的重载,在其中执行您的逻辑并将结果传递给通用 AddParameter:

    public bool AddParameter(string pattern, SqlDbType parameterType, int length, string value)
    {
        //do your stuff
        return AddParameter<string>(pattern, parameterType, length, updatedValue);
    }
    
    public bool AddParameter<T>(string pattern, SqlDbType parameterType, int length, T value)
    {
    }
    

    【讨论】:

    • C# 如何知道我是要使用一种方法还是另一种方法?我的意思是,string 也匹配 T?所以有两种方法可能意味着......
    • 我应该补充一点,AddParameter&lt;T&gt; 也是从 AddParameters&lt;T&gt;. 调用的,AddParameters&lt;T&gt; 也会设法调用AddParameter 而不是AddParameter&lt;T&gt;,还是我必须复制该函数?
    • 您可以在 AddParameters 中检查参数类型是否为字符串并选择正确的方法,例如if(value is string) AddParameter(value.ToString()); else AddParameter(value);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多