仅在值可用时返回值。如果我使用条件来检查null条件,它会抛出异常。 “说并非所有代码路径都返回一个值”
internal PinMessage()
{
obj.PinsAvailable.ObserveOn(SynchronizationContext.Current).Subscribe(HandlePinsAvailable);
}
private void HandlePinsAvailable(byte[] pinBytes)
{
pinmesssage = Encoding.ASCII.GetString(pinBytes);
}
internal string GetPinMessage(string AccoutNumber)
{
string pinstring = string.Empty;
obj.SendPinRequest(AccoutNumber);
pinstring = pinmesssage;
return pinstring;
}
private string _pinMessage;
public string pinmesssage
{
get//Not all Code paths return a value
{
if (_pinMessage != null)
return _pinMessage;
}
set { _pinMessage = value; }
}
答案 0 :(得分:0)
您收到此编译错误,因为在_pinMesSafe为null的情况下您不返回任何内容。您需要从Access中返回一些内容,或者在真实情况下返回内容,或者抛出异常。
答案 1 :(得分:0)
private string _pinMessafe;
public string pinmesssage
{
get {
if (_pinMessafe != null)
return _pinMessafe;
}
set { _pinMessafe = value; }
}
你必须在被调用时返回一些东西,你不能只是暂停一个方法调用。 你能做的就是自己强行检查:
private string _pinMessafe;
public string pinmesssage
{
get {
return _pinMessafe ?? GetMessage()
}
set { _pinMessafe = value; }
}
在这种情况下,GetMessage()
必须负责返回消息。您提供的信息很难给出更详细的答案。
您应该编辑代码以使其更具可读性(包括英语拼写错误)并在需要时添加信息。
答案 2 :(得分:0)
这不是“最佳”做法,但会起作用,让你的消费者等到制作人编写变量。
private string _pinMessafe;
object locker = new object();
public string pinmesssage
{
get
{
string x = null;
while(x == null) {
lock(locker) { x = _pinMessafe ; }
Thread.Sleep(1);
}
return x;
}
set { lock(locker) { _pinMessafe = value; } }
}