将动态变量转换为字符串并检查null或empty

时间:2018-02-20 10:40:04

标签: c# .net

我有这样的方法:

public void TestMethod(dynamic details)
{
   string det = (string)Convert.ToType(details,typeof(string))

}

我想检查String.IsNullOrEmpty(详情)。为此,我需要将它从对象转换为字符串。

我试过了:

string det = (string)Convert.ToType(details,typeof(string))

抛出错误:

  

“对象必须实现IConvertible”

我无法在课堂上实现此界面,因为它是由另一个团队编写的。

无论如何要将“详细信息”检查为空或空?

5 个答案:

答案 0 :(得分:3)

如果details确实是string,则无需转换它:

string detailAsString = (string)details;

如果不是,则必须将其强制转换为实际类型并对其执行一些魔术,因为您无法在没有指定转换方式的情况下调用Convert.ChangeType

您应该考虑是否需要dynamic。如果您不知道类型object甚至比dynamic更好。

答案 1 :(得分:1)

这只是部分解决方案,但评论代码格式对我的建议来说太有限了:

public void TestMethod(dynamic details)
{
   string det = null;
   var convertible = details as IConvertible;
   if(convertible != null)
   {
       det = (string)Convert.ToType(details,typeof(string))
   } 
   else if(details != null)
   {
       // not so good since you have to relay on implementation...
       det = details.ToString(); 
   }

   if(!string.IsNullOrEmpty(det))
   {
       // the rest of the code goes here...
   }
}

答案 2 :(得分:1)

嗯,你可以单独检查它们。

public void TestMethod(dynamic details)
{ 
    if(details != null)
    {
      string det = details.ToString();
      if(string.IsNullOrEmpty(det)) { }
    }
}

答案 3 :(得分:1)

试试这个:

if(String.IsNullOrEmpty(Convert.ToString(details)))
{
   // Do something if null
}else
{
// Do something if not null
}

答案 4 :(得分:0)

如果details是字符串,则无需转换它。 如果细节可以为null,那么:

if ((details as string) != null && details != "")
{
    ....
}