我正在尝试将变量 id 从一个类发送到另一个类, 由于某种原因,我收到错误-> 需要对象引用。
返回错误的字符串
public string RegApplicantInfo1 { get; } = $"/v1/consumer/applications/{testConsumer.id}/register-applicant-contact-information";
由于类似的功能对我有用,所以我无法弄清楚逻辑为什么不起作用。
Users.cs
public class Users
{
public class TestConsumer
{
public string id { get; } = "XXXXXXXX";
}
}
Uri.cs
public class Uri
{
private Users.TestConsumer testConsumer;
public Uri(Context context)
{
Context = context;
testConsumer = new Users.TestConsumer();
}
public class RegisterUri
{
public string RegApplicantInfo1 { get; } = $"/v1/consumer/applications/{testConsumer.id}/register-applicant-contact-information";
}
}
答案 0 :(得分:1)
两个问题:
1)testConsumer
是Uri
类的成员,而不是RegisterUri
类的成员,因此无法从RegisterUri
类中运行的代码上下文访问它。
2)即使已解决,也要尝试使用testConsumer
实例化之前。当该值取决于在实例化该类之前不会设置的变量时,您不能为该属性设置硬编码默认值。
尚不清楚您是否打算将testConsumer
居住在RegisterUri
中,还是打算将RegApplicantInfo1
居住在Uri
中,还是打算将RegisterUri
居住在从Uri
继承(而不仅仅是成为一个内部类),以便它能够从其父级访问该属性。
所以这是使错误消失的一种方法-在这种情况下,使用继承。 RegisterUri
现在继承自Uri
,而testConsumer
现在是protected
,因此子类可以访问它。看来这可能是合乎逻辑的方法,但是我无法知道这是否是您真正想要的行为(您只是通过查看错误来描述问题,而不是希望达到的目的)。
public class Users
{
public class TestConsumer
{
public string id
{
get;
}
= "XXXXXXXX";
}
}
public class Uri
{
protected Users.TestConsumer testConsumer;
private Context Context;
public Uri(Context context)
{
Context = context;
testConsumer = new Users.TestConsumer();
}
}
public class RegisterUri : Uri
{
public RegisterUri(Context context): base (context)
{
}
public string RegApplicantInfo1
{
get
{
return $"/v1/consumer/applications/{testConsumer.id}/register-applicant-contact-information";
}
}
}
答案 1 :(得分:0)
我猜这个代码甚至无法编译...错误出现在代码的第二部分
应该是这样的: 对于第一部分不确定,您要在哪里设置变量值?
public class Users
{
public class TestConsumer
{
public string id { get; }
}
}
public class Uri
{
private Users.TestConsumer testConsumer;
//you are missing this declaration
private Context context;
public Uri(Context context)
{
this.context = context; <----- here if you try to assign context to Context class, it will give error and ask for a reference
testConsumer = new Users.TestConsumer();
}
}