相关疑难解决方法(0)

以接口为基类的三元表达式

我试图创建一个三元表达式,我收到以下错误

"无法确定条件表达式的类型,因为LiveSubscription和DisconnectedSubscription之间没有隐式转换"

同样的逻辑在if语句中起作用,但我想理解为什么它不能在三元表达式中起作用 -

以下是我要做的事情的要点:

public interface IClientSubscription
{
    bool TryDisconnect();
}

public class LiveSubscription : IClientSubscription
{
    public bool TryDisconnect()
    {
        return true;
    }
}

public class DisconnectedSubscription : IClientSubscription
{
    public bool TryDisconnect()
    {
        return true;
    }
}

public class ConnectionManager
{
    public readonly IClientSubscription Subscription;

    public ConnectionManager(bool IsLive)
    {
        // This throws the exception
        Subscription = (IsLive)
            ? new LiveSubscription()
            : new DisconnectedSubscription();

        // This works
        if (IsLive)
        {
            Subscription = new LiveSubscription();
        }
        else
        {
            Subscription …
Run Code Online (Sandbox Code Playgroud)

if-statement ternary-operator c#-4.0

8
推荐指数
1
解决办法
438
查看次数

单行if语句生成强制转换错误

C#的新手,所以我遇到了一个简短的陈述问题.我想转换......

if (m_dtLastLogin == null)
    drow["LastLogin"] = DBNull.Value;
else
    drow["LastLogin"] = m_dtLastLogin;
Run Code Online (Sandbox Code Playgroud)

drow["LastLogin"] = (m_dtLastLogin == null) ? System.DBNull.Value : m_dtLastLogin;
Run Code Online (Sandbox Code Playgroud)

长版本工作得很好,但是,简写版本会生成错误"无法确定条件类型,因为'System.DBNull'和'System.DateTime?'之间没有隐式转换." 我的支持代码基本上是......

private DateTime? m_dtLastLogin;
m_dtLastLogin = null;
DataRow drow;
drow = m_oDS.Tables["Users"].Rows[0];
Run Code Online (Sandbox Code Playgroud)

有人可以用这个简短的手帮我吗?

c# if-statement

0
推荐指数
1
解决办法
1955
查看次数

标签 统计

if-statement ×2

c# ×1

c#-4.0 ×1

ternary-operator ×1