这是一种无用的铸造吗?

Pur*_*ome 2 .net casting

这个问题是我提出上一个问题的延伸(并得到了解答).我正在重构我的代码,并尝试使用各种重构的解决方案.

我提出的解决方案之一(但不满意......记住,我只是尝试一些个人编码风格)wsa以下代码: -

if (data is ITagElement)
{
    if (((ITagElement) data).TagList.IsNullOrEmpty())
    {
        ((ITagElement) data).TagList = new List<Tag>();
    }

    ((ITagElement) data).TagList.Add(new Tag
    {
        K = xmlReader.GetAttribute("k"),
         V = xmlReader.GetAttribute("v")
    });
}
Run Code Online (Sandbox Code Playgroud)

请注意我是如何将父对象强制转换data为多次触发的接口类型?代码有效,但我觉得这是代码味道 - >它不是很有效.我觉得这可以改进 - 来自任何一个大师的想法吗?

Tim*_*eld 11

那怎么样,所以你只做了一次演员:

ITagElement someData = data as ITagElement
if (someData != null)
{
   if (someData.TagList.IsNullOrEmpty())
    {
        someData.TagList = new List<Tag>();
    }

    someData.TagList.Add(new Tag
    {
        K = xmlReader.GetAttribute("k"),
         V = xmlReader.GetAttribute("v")
    });

}
Run Code Online (Sandbox Code Playgroud)