Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中获取或设置任意类型的对象#_C#_Object_Casting_Generic Collections - Fatal编程技术网

C# 如何在C中获取或设置任意类型的对象#

C# 如何在C中获取或设置任意类型的对象#,c#,object,casting,generic-collections,C#,Object,Casting,Generic Collections,我有一个班级将作为“模型提供者”。基本上这就是它应该做的: ModelProvider创建多个对象,例如项目和用户。这里的想法是,我可以从应用程序的任何部分调用ModelProvider,以获取最新的用户或项目。此外,从应用程序的任何部分,我都可以将更新的用户或项目推送到模型提供者 简而言之:ModelProvider应该是承载User和Project的最新实例的类 草稿 class ModelProvider { private User user; private Project p

我有一个班级将作为“模型提供者”。基本上这就是它应该做的:

ModelProvider
创建多个对象,例如
项目
用户
。这里的想法是,我可以从应用程序的任何部分调用
ModelProvider
,以获取最新的
用户
项目
。此外,从应用程序的任何部分,我都可以将更新的
用户
项目
推送到
模型提供者

简而言之:
ModelProvider
应该是承载
User
Project
的最新实例的类

草稿

class ModelProvider {
  private User user;
  private Project project;

  public ModelProvider() {
    this.user = new User();
    this.project = new Project();
  }

  public void SetModel(T model) {
    // If 'model' is of type User, do something like: this.user = model;
    // If 'model' is of type Project, do something like: this.project = model;
  }

  public T GetModel(???) {
    // Return the requested model. Either:
    // return this.user; or
    // return this.project;
  }

}

但是,我不知道如何实际获取和设置请求的模型。感谢您的帮助:-)

您试图做的事情看起来很奇怪。一种可能更好的方法是提供指定的方法,但这取决于您实际试图实现的目标:

  • void SetUser(用户用户)
  • User GetUser()
  • void SetProject(项目项目)
  • Project GetProject()

    • 你想做的事情看起来很奇怪。一种可能更好的方法是提供指定的方法,但这取决于您实际试图实现的目标:

      • void SetUser(用户用户)
      • User GetUser()
      • void SetProject(项目项目)
      • Project GetProject()

      您可以将其设置为通用类:

      class ModelProvider<T>  // (optionally) where T: baseClassOfUserAndProject
      {
          private T model;
      
          public void SetModel(T model) 
          {
              this.model = model;
          }
      
          public T GetModel() 
          {
              return this.model;
          }
      }
      
      class ModelProvider//(可选)其中T:baseClassOfUserAndProject
      {
      私有T模型;
      公共模型(T模型)
      {
      this.model=模型;
      }
      公共T GetModel()
      {
      返回此.model;
      }
      }
      
      您可以将其设置为通用类:

      class ModelProvider<T>  // (optionally) where T: baseClassOfUserAndProject
      {
          private T model;
      
          public void SetModel(T model) 
          {
              this.model = model;
          }
      
          public T GetModel() 
          {
              return this.model;
          }
      }
      
      class ModelProvider//(可选)其中T:baseClassOfUserAndProject
      {
      私有T模型;
      公共模型(T模型)
      {
      this.model=模型;
      }
      公共T GetModel()
      {
      返回此.model;
      }
      }
      
      模型提供程序的意图是在任何给定时间仅拥有
      用户
      项目
      中的一个,而不是同时拥有两个?编辑:此外,这两个对象是否都继承自同一基类/接口?如果您不知道或不关心模型的类型,为什么不将单个
      模型
      字段键入为
      对象
      (或者
      用户
      项目
      的其他常见基本类型?@ChrisSinclair否,
      模型提供程序
      在任何给定时间都应保留每个实例的一个实例。那么您希望GetModel()方法如何确定它应该返回用户还是项目?@Eddy这就是问题所在:-)
      ModelProvider
      是否打算在任何给定的时间内只拥有
      user
      project
      中的一个,而不是同时拥有两个?编辑:此外,这两个对象是否都继承自同一基类/接口?如果您不知道或不关心模型的类型,为什么不只拥有一个
      模型
      字段类型为
      对象
      (或
      用户
      项目
      的其他常见基本类型?@ChrisSinclair否,
      模型提供程序
      应在任何给定时间保留每个对象的一个实例。那么您如何期望GetModel()方法可以确定它应该返回用户还是项目?@Eddy这就是问题所在:-)我认为称之为“正确的方式”还为时过早,因为OP对他的意图非常不清楚。在我看来,他似乎在试图创建某种通用包装器对象,而他不想关心是否将用户或项目塞进其中。@Eddy:同意。我的答案改写了一点。我认为称之为“正确的方式”是错误的还为时过早,因为OP对他的意图非常不清楚。在我看来,他似乎在试图创建某种通用包装器对象,而他不想关心是否在其中填充用户或项目。@Eddy:同意。将我的答案改写了一点。