【问题标题】:Passing type as a parameter [duplicate]将类型作为参数传递[重复]
【发布时间】:2021-09-24 01:03:57
【问题描述】:

我有一个方法,它采用某种继承类型的对象并在内部数据结构中搜索它...

public (bool,Point) GetItemPosition(IMyBaseType type)
{
    ...
}

所以上述方法的使用会是这样的:

var (isFound, location) = myDataContainer.GetItemPosition(myDataItem);

在数据结构类中,我想利用搜索方法。但是,我不想创建所需数据项的实例(因为这会产生开销)——我只想将类类型作为值传递。目前,我正在创建一个数据项实例...

public bool AddTarget()
{
    var (hasTarget, location) = GetItemPosition(new SomeDataItem().GetType() as IMyBaseType, 0, 0);
    ...
}

如何传递类类型本身?

【问题讨论】:

  • 您的意思是GetItemPosition 将搜索具有传入类型的任何内容,而不是Equals 传入对象的任何内容?传入的类型在编译时是否总是已知的?
  • 是的,是的。我希望搜索传入的类型,但要确保它属于某个基类。
  • 我意识到我对GetItemPosition 的定义在这里并不好。第一个参数需要更改为接受类型而不是实例的东西 - 但这是我的问题。

标签: c# .net-core types method-parameters


【解决方案1】:

使用泛型:

public (bool,Point) GetItemPosition<T>() where T: IMyBaseType
{
    ...
}

在该方法中,您将传入的类型称为T。例如,您可以检查 object obj 的类型是否为 Tis

if (obj is T) { ... }

调用者看起来像:

GetItemPosition<SomeDataItem>()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2015-03-22
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多