在当前条件下不存在 C# 更好的写法?

问题描述

我有 3 个图片框,都允许为空值。我想做的是写出所有可能的 if 条件;我尝试分配变量,但我的变量超出了范围。任何更好的解决方案,请

MemoryStream ms = new MemoryStream();

if (imGuest != null) 
{
     imGuest.Save(ms,ImageFormat.Png);  
     byte[] arr = ms.ToArray(); 
} 
else 
{ 
     int? arr = null ; 
}

if (imDoc != null) 
{ 
     imDoc.Save(ms,ImageFormat.Png); 
     byte[] arrDoc1 = ms.ToArray(); 
} 
else 
{ 
     int? arrDoc1 = null; 
}

if (imDoc2 != null) 
{ 
     imDoc2.Save(ms,ImageFormat.Png); 
     byte[] arrDoc2 = ms.ToArray();
}
else 
{ 
     int? arrDoc2 = null; 
}


using (sqlCommand cmd = new sqlCommand("sp_insert",MainClass.con))
{
    // code here
    cmd.Parameters.AddWithValue("@img",arr);
    cmd.Parameters.AddWithValue("@doc1",arrDoc1);
    cmd.Parameters.AddWithValue("@doc2",arrDoc2);
}

解决方法

试试这个方法:

using (var ms = new MemoryStream())
{
    Func<Image,byte[]> getImage = (Image img) =>
    {
        if (img == null)
        {
            return null;
        }

        img.Save(ms,ImageFormat.Png);
        return ms.ToArray();
    };

    using (var cmd = new SqlCommand("sp_insert",MainClass.con))
    {
        // code here
        cmd.Parameters.AddWithValue("@img",getImage(imGuest));
        cmd.Parameters.AddWithValue("@doc1",getImage(imDoc));
        cmd.Parameters.AddWithValue("@doc2",getImage(imDoc));
    }
}