将变量类型更改为/从(TreeViewEventArgs或TreeViewCancelEventArgs)更改

时间:2018-07-30 07:03:36

标签: c# treeview typeconverter

在我的c#项目中,我想将变量类型从TreeViewEventArgs转换为TreeViewCancelEventArgs,或者相反。

我写了一个代码,但是有一个错误:
“错误1'对象'不包含'节点'的定义,找不到扩展方法'节点'接受类型为'对象'的第一个参数(您是否缺少using指令或程序集引用?)” >

这是我的功能代码的一部分:

public void func_make_sql_filters_string(TreeViewEventArgs e1 ,TreeViewCancelEventArgs e2)
{
    object value_event_object ;
    Type type_event;

    if (e1 == null)
    {
        type_event = e2.GetType();
        value_event_object = e2;
    }
    else
        //  if(e2 == null)
    {
        type_event = e1.GetType();
        value_event_object = e1;
    }

    var e = Convert.ChangeType(value_event_object, type_event.GetType());
    if (e.Node.Level == 1)
    {
        array_treeView_checking[e.Node.Index] = e.Node.Parent + " = N'" + e.Node.Text + "'";
    }
}

2 个答案:

答案 0 :(得分:2)

您不能只是从A型更改为B型。您必须进行某种类型的转换,这种转换在您的情况下实际上没有任何意义。毕竟,您只是在两者的Node属性之后,所以为什么不仅仅得到它呢?

public void func_make_sql_filters_string(TreeViewEventArgs e1 , TreeViewCancelEventArgs e2)
{
    TreeNode node = e1?.Node ?? e2?.Node;

    if (node == null)
    {
        throw new Exception("Both events are null or don't have a related node.");
    }

    if (node.Level == 1)
    {
        array_treeView_checking[node.Index] = $"{node.Parent} = N'{node.Text}'";
    }
}

答案 1 :(得分:0)

Convert.ChangeType要求value_event_object对象实现IConvertible接口。在这种情况下,TreeViewEventArgsTreeViewCancelEventArgs都不会实现该接口。

您可以手动创建另一个对象:

var TreeViewEventArgs e = new TreeViewEventArgs {
    Node = e2.Node
}

但是,如果只需要访问Node属性(假设几乎一个事件args不为null):

node = e1?.Node ?? e2.Node;