首页 » .NET » C# 返回结构体为空的解决办法

C# 返回结构体为空的解决办法

原文 http://blog.csdn.net/fuemocheng/article/details/76578149

2017-08-02 17:20:09阅读(593)

转自:http://blog.csdn.net/xiaobai1593/article/details/7274740#comments

适用情况:

1、函数的返回类型是一个结构体(如StructA),而这个返回值有可能为空。

此时不能直接返回null或者0,否则编译器会报错:无法将null或者0隐式转成结构体StructA,因为它不是一种可以为null值的类型。

public struct StructA  
{  
    ...
}  
public StructA GetStruct()  
{  
    if(...)  
    {  
        return null;  
    }  
    else  
    {  
        StructA temp = new StructA();  
        return temp;  
    }  
}  

解决办法是在网上找到的,应该还有别的方法

public structA? GetStruct()  
{
    ...
}  

即在返回类型后面加“?”

原因:加一个问号表示一个可空对象,相当于Nullable类型。

2、对返回值进行判断:
structA? a = GetStruct(); 
if (a!=null)  
{  
    ...
}  
else  
{  
    //返回的结构体为空  
}  
例:
    public Dictionary<string, TGameText> m_dicGameText = new Dictionary<string, TGameText>();
    public struct TGameText
    {
        public string m_strKeyName;
        public string m_strContext;
        public bool m_bCanShow;
    }
    public TGameText? GetGameText(string key)
    {
        if (m_dicGameText.ContainsKey(key))
        {
            return m_dicGameText[key];
        }
        return null;
    }
    public void SetContext(string key, string context, bool canShow)
    {
        TGameText? currText = GetGameText(key);
        if (currText != null)
        {
            if (currText.Value.m_strContext != context)
            {
                TGameText tempText = new TGameText();
                tempText.m_strKeyName = key;
                tempText.m_strContext = context;
                tempText.m_bCanShow = canShow;
                currText = tempText;
            }
        }
        else
        {
            TGameText tempText = new TGameText();
            tempText.m_strKeyName = key;
            tempText.m_strContext = context;
            tempText.m_bCanShow = canShow;
            m_dicGameText.Add(key, tempText);
        }
    }

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹