为什么我不能在C#中为对象赋值?

时间:2014-11-24 23:44:33

标签: c# events object radio-button

我正在尝试使用WinForms之间的事件在C#中编写代码。我想使用RadioButton(RadioButton在2.表单上)更改1.表单和2.表单的RichTextBox中的颜色​​文本,但是当我声明变量:Color valgtFarge = null;时,我收到以下错误消息: Cannot convert null to 'System.Drawing.Color' because it is a non-nullable value type。我究竟做错了什么? 功能:

private void rtf2_TextChanged(object sender, EventArgs e)
{
    Color colorChoice = null;

    if (rbtnBlack.Checked)
        colorChoice = Color.Black;

    //same here for the others RadioButtons

    if (myEventHandler != null && rtf2.Text.Length != 0)
    {
        myEventHandler(this, new Form1EventArgs(rtf2.Text.Substring(rtf2.Text.Length - 1),
            colorChoice));
    }
}

4 个答案:

答案 0 :(得分:4)

Color是一个结构,而不是一个类。结构不能是null。如果您想要一个可为空的结构,则可以使用Nullable<Color>(或其简写语法Color?)代替您的类型。

阅读材料:Classes and Structs

答案 1 :(得分:3)

好吧,因为Colorstruct,而结构不能 null 。您可以使用Nullable<T>使其可以为空:

Nullable<Color> colorChoice = null;
// or shorter
Color? colorChoice = null;

然后要获取Nullable对象的值,请使用Value属性或GetValueOrDefault方法(如果您不知道是否&#39},您应该更喜欢这个; s null 。因为如果Value null ,{{1}}会抛出异常。\ n \ n进一步参考:

答案 2 :(得分:1)

您也可以使用类似于null但更安全的Color.Empty;

Color color = Color.Empty;

答案 3 :(得分:0)

您可以使用问号将其定义为可空:

Color? color = null;