我有这样的方法:
public void TestMethod(dynamic details)
{
string det = (string)Convert.ToType(details,typeof(string))
}
我想检查String.IsNullOrEmpty(详情)。为此,我需要将它从对象转换为字符串。
我试过了:
string det = (string)Convert.ToType(details,typeof(string))
抛出错误:
“对象必须实现IConvertible”
我无法在课堂上实现此界面,因为它是由另一个团队编写的。
无论如何要将“详细信息”检查为空或空?
答案 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 != "")
{
....
}