C#如何扩展参数并将其传递给属性

阿列克谢·季托夫(Alexey Titov)

我正在向动态创建的参数添加属性。一个属性实现IItemsSource接口,其用法如下:

using Xceed.Wpf.Toolkit.PropertyGrid.Attributes;

public class MySourceObject
{
    [ItemsSource(typeof(MyCustomItemsSource))]
    public string SelectedString { get; set; }
}

public class MyCustomItemsSource : IItemsSource
{
    public MyCustomItemsSource()
    {
    }

    public ItemCollection GetValues()
    {
        ItemCollection strings = new ItemCollection();
        strings.Add("A");
        strings.Add("B");
        strings.Add("C");

        // Here I want to add some items from a collection, passed to the class somehow

        return strings;
    }
}

如何将自定义对象列表传递给MyCustomItemsSource构造函数?

卢卡·费里(Lucca Ferri)

目前尚不清楚您想对数据做什么。创建属性时,您没有此类型的实例。此属性不是对象的实例,因此您不能传递任何参数,因此必须在运行时创建对象,并且可以通过反射来创建。

您可以使用:

IItemsSource myObject = Activator.CreateInstance<IItemsSource>(obj1, obj2,...);

更新:据我了解,您想要传递类型,然后传递值以添加到列表中,以便添加

public interface IItemsSource
{
    List<string> GetValues();
}
class ItemsSourceAttribute : Attribute
{
    public IItemsSource Instance { get; set; }
    public ItemsSourceAttribute(Type type, params string[] listParams)
    {
        if (!typeof(IItemsSource).IsAssignableFrom(type))
            throw new ArgumentException($"IItemsSource is not assignable from {type.Name}.");

        Instance = (IItemsSource) Activator.CreateInstance(type, listParams);
    }
}

public class MyCustomItemsSource : IItemsSource
{
    private List<string> _privateList;

    public MyCustomItemsSource(params string[] list)
    {
        _privateList = list.ToList();
    }

    public List<string> GetValues()
    {
        // _privateList will start with a value of [abc, 123], as we passed on the constructor.
        _privateList.Add("test");
        // now [abc, 123, test]
        return _privateList;
    }
}

然后您可以像这样将项目添加到列表中:

[ItemsSource(typeof(MyCustomItemsSource), "abc", "123"]

希望我做对了。如果您需要任何调整,请发表评论。我写这篇文章时没有进行测试,因为我现在不在这台机器上使用VS。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C#分隔参数并将其传递给Process.Start()方法

如何在C或C ++中包装参数并将其传递给system或exec *

如何从路由参数获取ID并将其传递给服务

如何调用参数并将其传递给int数组

如何获取参数值并将其传递给存储过程?

如何使用户输入成为数组并将其传递给C#中的方法?

Bash-如何扩展变量并将其单引号传递给sudo

如何将参数传递给QueryDicts并将其连续传递给Django表单以在其中使用

如何从列表中提取参数并将其传递给函数调用

如何使用laravel获取选择/下拉值并将其传递给url参数?

如何获取右值参考参数并将其传递给其他地方?

如何使用Play with Scala映射多个Future并将其作为参数传递给视图

如何从下拉列表中选择密码并将其作为参数传递给 jenkins 作业?

如何从用户那里获取任意数量的参数,并将其传递给使用varargs(variable arguments)的方法?

如何将字符串转换为参数名称并将其传递给函数?

如何将参数传递给@ Html.Partial并将其读入视图?

如何使用Lambda捕获可变参数并将其传递给内部范围

如何为在servlet中返回数字并将其传递给jsp文件的方法设置参数?

如何检查函数的参数并将其传递?

如何在C#中将参数传递给传递查询?

jQuery如何从数组获取属性并将其传递给另一个数组

使用 Observables 获取 URL 参数并将其传递给服务

使用函数参数并将其传递给lm公式

查找特定的参数并将其传递给命令

将对象属性传递给表单并将其取回

尝试将布尔C#变量传递给javascript变量并将其设置为true

从后面的C#代码调用数据并将其传递给Javascript

声明一个指向属性的指针并将其作为 inout 参数传递给 Swift 中的 func?

如何在C#中创建将<this>类的字符串属性作为参数传递给它的Lazy属性?