在我的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 + "'";
}
}
答案 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
接口。在这种情况下,TreeViewEventArgs
或TreeViewCancelEventArgs
都不会实现该接口。
您可以手动创建另一个对象:
var TreeViewEventArgs e = new TreeViewEventArgs {
Node = e2.Node
}
但是,如果只需要访问Node属性(假设几乎一个事件args不为null):
node = e1?.Node ?? e2.Node;