只有当它可用时返回值否则等待值..... c#

时间:2013-08-22 21:21:20

标签: c# multithreading asynchronous get set

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

3 个答案:

答案 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; } }
}