gpt4 book ai didi

c# - 使用反射在我的 ViewModel 中创建通用类型命令有什么缺点?

转载 作者:行者123 更新时间:2023-11-30 17:16:43 25 4
gpt4 key购买 nike

我有一个具有许多不同列表属性的数据对象。我想使用单个 AddObject 命令而不是为每个列表创建不同的命令,因此想出了以下代码。

使用它有什么缺点吗?我认为性能可能会很慢,但老实说我没有看到任何区别。

public MyViewModel()
{
_addCommand = new RelayCommand<IEnumerable>(AddGenericObject);

// Old code.... defines an Add command per list
// _addAddressCommand = new RelayCommand(() => AddObject<Address>(AddressList));
// _addPhoneCommand = new RelayCommand(() => AddObject<Phone>(PhoneList));
// ... etc
}

private void AddGenericObject(IEnumerable list)
{
// Find Add Method
var addMethod = this.GetType()
.GetMethod("AddObject", BindingFlags.NonPublic | BindingFlags.Instance);

// Created Generic Add Method
Type genericType = list.GetType().GetGenericArguments()[0];
var genericAddMethod = addMethod.MakeGenericMethod(genericType);

// Invoke Method
genericAddMethod.Invoke(this, new object[] { list });
}

private void AddObject<T>(EntityCollection<T> list)
where T : EntityObject, new()
{
var newItem = new T();
list.Add(newItem);
}

它在 XAML 中的使用方式如下:

<Button Content="New Address" 
Command="{Binding AddCommand}"
CommandParameter="{Binding AddressList}" />

<Button Content="New Phone"
Command="{Binding AddCommand}"
CommandParameter="{Binding PhoneList}" />

最佳答案

一言以蔽之 - 性能,但在您摆脱代码基准测试之前 - 它可能足够快以满足您的需求。

关于c# - 使用反射在我的 ViewModel 中创建通用类型命令有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com