【问题标题】:Using a method from a partial class使用部分类中的方法
【发布时间】:2011-02-21 18:31:28
【问题描述】:

所以我有这个方法:

public IList<IndicationProject> GetProjectsForSponsor(int sponsorId)
        {
            IList<IndicationProject> result = new List<IndicationProject>();

            IWspWB_IndicationGetProjectsForEntityResultSet tmpResultSet = ExecWspWB_IndicationGetProjectsForEntity(sponsorId);

            if (tmpResultSet.WspWB_IndicationGetProjectsForEntity1 != null)
            {
                foreach (WspWB_IndicationGetProjectsForEntity1LightDataObject ldo in tmpResultSet.WspWB_IndicationGetProjectsForEntity1)
                {
                    result.Add(
                        new IndicationProject()
                            .Named(NullConvert.From(ldo.Stp_name, null))
                            .IdentifiedBy(NullConvert.From(ldo.Stp_straight_through_processing_id, 0))
                        );
                }
            }

            return result;
        }

包含在此类中:

namespace Web.Data.Indications
{
    public partial class IndicationsDataTier
    {

我想在我的另一个类中使用该方法,如下所示:

IList<IndicationProject> oldList = Web.Data.Indications.IndicationsDataTier.GetProjectsForSponsor(entityId);

但是当我编译我得到这个错误:

错误 44 非静态字段、方法或属性“Web.Data.Indications.IndicationsDataTier.GetProjectsForSponsor(int)”需要对象引用

【问题讨论】:

    标签: c# .net partial-classes


    【解决方案1】:

    您的方法是一个实例成员,但您调用它时就好像它是静态的。

    如果你希望它是一个静态方法,你应该添加 static 关键字:

    public static IList<IndicationProject> GetProjectsForSponsor(int sponsorId)
    {
         // ...
    }
    

    如果您希望它成为一个实例方法,您应该创建(或以其他方式获得对该类型的引用)一个实例,然后在该实例上调用该方法:

    using Web.Data.Indications;
    
    // ...
    
    IndicationsDataTier idt = new IndicationsDataTier();
    IList<IndicationProject> oldList = idt.GetProjectsForSponsor(entityId);
    

    【讨论】:

      【解决方案2】:

      该方法不是静态的,因此您需要实际实例化 IndicationsDataTier

      【讨论】:

        【解决方案3】:

        您正在尝试通过类访问该方法,但您需要通过该类的 instance 访问它,因为它不是静态方法。

        【讨论】:

          【解决方案4】:

          指定方法的方法头不包含static关键字。

          【讨论】:

            【解决方案5】:

            您已将方法声明为非静态的。

            您将其作为类方法 (MyClass.MyMethod) 访问,而不是作为实例方法 (myVar.MyMethod)。

            将声明更改为 static 以按您的方式称呼它。

            【讨论】:

              【解决方案6】:

              您还没有将方法声明为静态,因此您需要先创建一个实例。例如:

              var oldList = new Web.Data.Indications.IndicationsDataTier();
              
              oldList.GetProjectsForSponsor(int sponsorId);
              

              【讨论】:

                【解决方案7】:

                从阅读您的方法看来,您可以将方法标记为静态。

                【讨论】:

                  【解决方案8】:

                  如果IndicationsDataTier的构造函数是无参的可以试试:

                  IList<IndicationProject> oldList = (new Web.Data.Indications.IndicationsDataTier).GetProjectsForSponsor(entityId);
                  

                  使用静态修饰符..

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2016-04-27
                    • 2020-01-27
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-10-19
                    • 1970-01-01
                    • 2021-07-19
                    • 2020-02-18
                    相关资源
                    最近更新 更多