【问题标题】:Why am I getting this compilation error in my abstract base class?为什么我的抽象基类中出现此编译错误?
【发布时间】:2016-03-13 17:27:01
【问题描述】:

我正在尝试扩展这个插件以供我自己使用...

https://github.com/jamesmontemagno/Xamarin.Plugins/blob/master/Connectivity/Connectivity/Connectivity.Plugin.Abstractions/BaseConnectivity.cs

但是当我将代码复制到 Visual Studio 时,我遇到了一些错误。

我是否需要导入一些特殊的框架才能使用 '=>' 运算符和 'Invoke' 方法?这是一个抽象基类。我正在使用 VS2013

【问题讨论】:

  • 你用的是VS2015吗?
  • 不,这是 VS2013。这就是问题所在?
  • 问题是你试图在 VS2013 中使用 C#6 语法。
  • ?。是 C# 6 中的一项功能,仅在 Visual Studio 2015 中可用。在这里阅读:msdn.microsoft.com/en-us/library/dn986595.aspx
  • 感谢您的帮助,我是来自 Java 的 C# 新手。

标签: c# visual-studio xamarin abstract-class


【解决方案1】:

?。是 C# 6 的一项功能,以及 => 运算符(用于表达式主体成员时)仅在 Visual Studio 2015 中可用。

在此处null-conditional operators 和此处=> operator 了解它们

C#

protected virtual void OnConnectivityChanged(ConnectivityChangedEventArgs e)
{
    if (ConnectivityChanged != null)
        ConnectivityChanged.Invoke(this, e);
}

【讨论】:

  • 添加一些内容以提及 => 作为方法主体,我会投票赞成。
  • 您还应该解决琼斯波利斯的评论
  • 另外,我并不是要吹毛求疵,但这并不是 => 运算符本身对 C# 6.0 来说是新的,它仅用于表达式主体成员。您可能应该在重新设计答案时澄清这一点,特别是因为您的链接转到 lambda 页面而不是新功能。
【解决方案2】:

?. 在 C#6 中是 Null-conditional operators。您使用的是 C#6 吗? C#6 featured

将此代码替换为

if(ConnectivityChanged != null) 
{ 
    ConnectivityChanged.Invoke(this, e); 
} 

这相当于我们的代码ConnectivityChanged?.Invoke(this, e);

【讨论】:

    【解决方案3】:

    应该这样做。

    protected virtual void OnConnectivityChanged(ConnectivityChangedEventArg e)
    {
       if(ConnectivityChanged != null)
       {
           ConnectivityChanged.Invoke(this,e);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-14
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2012-03-13
      相关资源
      最近更新 更多