0

仅在可用时返回该值。如果我使用条件来检查 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; }
    }
4

3 回答 3

0

您会收到此编译错误,因为在 _pinMesSafe 为空的情况下您不会返回任何内容。您需要从您的 Access 中返回某些内容,或者在这种情况下返回某些内容,或者抛出异常。

于 2013-08-22T21:29:17.640 回答
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()必须注意返回消息。您提供的信息很难给出更详细的答案。您应该编辑您的代码以使其更具可读性(这包括英文拼写错误)并在需要时添加信息。

于 2013-08-22T21:37:21.963 回答
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; } }
}
于 2013-08-22T21:56:51.913 回答