解决 使用结构

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
我在使用结构时遇到麻烦。为什么这样不起作用:-
C#:
        Changes Changed = new Changes();
        Changed.Skip = true;
        struct Changes
        {
            public bool Skip;
            public bool EMPNO;
        }
线"Changed.Skip = true;被以下消息拒绝:-
IDE1007当前上下文中不存在名称“ Changed”
IDE1007当前上下文中不存在名称“ Changed.Skip”
通过研究,我发现 这个网站 我通过发布以下代码将他们的struct示例替换为我的代码:-
C#:
using System;               
public class Program
{
    public static void Main()
    {
        Changes Changed = new Changes();
        Changed.Skip = true;
        Console.WriteLine(Changed.Skip);
        Console.WriteLine(Changed.EMPNO);
    }
}
struct Changes
{
    public bool Skip;
    public bool EMPNO;
}
这完美地工作,产生了预期的结果
True
False
我尝试将我对Change的定义移动到与该代码结构匹配的位置,首先遵循包含Changes的类Changed = new Changes();,然后移至该对象的末尾
C#:
namespace MyJSv
{
    
}
在所有情况下,我从这些语句的第二条得到两条IDE1007消息,但是第一条没有错误。如果我写"Changed."没有Intellisense列表。
C#:
        Changes Changed = new Changes();
        Changed.Skip = true;
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,506
地点
悉尼,澳大利亚
编程经验
10+
您的第一个代码段没有任何意义。这表明您已尝试在方法内部声明结构。为什么这是个好主意?如果那不是您所做的,则应发布代码以显示您实际所做的事情。

我不明白为什么这么多人下定决心要在结构方面使生活更加艰难。以与对待类相同的方式对待结构。您将如何宣布新课程?您将创建一个以该类命名的新代码文件,对吗?对结构执行相同的操作。甚至在现有的类之后也不要声明它。结构是一流的类型,因此应这样处理。
 

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
您将创建一个以该类命名的新代码文件,对吗?对结构执行相同的操作。甚至在现有的类之后也不要声明它。结构是一流的类型,因此应这样处理。
所以我尝试了这个。我创建了这个对象
C#:
namespace MyJSv
{
    public struct Changes
    {
        public bool Skip;
        public bool EMPNO;
    }
}
然后我写
C#:
        私人更改已更改=新的Changes();
        Changed.Skip = true;
现在"Skip"呈绿松石色,如“更改”,表示它是一种类型,我收到此行的消息CS1519 TWICE:-
C1519类,结构或接口成员声明中的无效令牌'='

我真的不需要生成一个外部类,因此我尝试使用这样的普通布尔字段。我可以在接口类JSPG2Client的开头轻松地生成一系列这样的定义(请参阅 上一个查询 如果您需要一些背景信息)
C#:
        private bool Changed_Skip = false;
        Changed_Skip = true;
现在,以及出现两次消息C1519的同时,我还得到了消息IDE1007:-
IDE1007当前上下文中不存在名称“ Changed_Skip”
如果我省略“ private”,则结果相同,这始终是默认设置。

顺便说一句,我在VB.NET项目中使用了与内部定义的结构基本相同的代码,没有任何困难。 VB.NET的规则是否不同?另外,我在MS文档中没有看到任何内容表明无法在类中定义结构。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,504
地点
弗吉尼亚州切萨皮克
编程经验
10+
顺便说一句,我在VB.NET项目中使用了与内部定义的结构基本相同的代码,没有任何困难。
在VB.NET中不适用于我:
VB.NET:
Imports System

Module Program
    Public Structure Changes
        Public Skip As Boolean
        Public EMPNO As Boolean
    End Structure

    Private Changed As Changes = New Changes
    Changed.Skip = True

    Sub Main(args As String())
    End Sub
End Module

我在第10行收到错误:预期的BC30188声明。
 

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
这是一个代码语句,属于一个方法。
谢谢约翰,这是导致我的AHA的重要评论!我不明白为什么分配会导致错误,因为在我看来,我写的内容与我以前编写的可以确定的代码形式相同。当我这样组织代码时没有问题。当将语句写到我已将其注释掉的地方时出现错误,但是在set方法中写入它们时却没有错误。
C#:
{
    public class JSPG2Client
    {
...
        私人更改已更改=新的Changes();
        bool Changed_Skip = false;
        //Changed.Skip = true;
        //Changed_Skip = true;
        private string _Function = null;
        private string Function // => Request.Function
        {
            set
            {
...
                Changed.Skip = true;
                Changed_Skip = true;
            }
        }
因此,这是我不了解的关键因素。这个问题与struct无关,也与它是在内部定义的事实无关。因此,我得到相同的结果
C#:
        private struct SetByUser
        {
            public bool Skip;
            public bool EMPNO;
        }
        private SetByUser Changed = new SetByUser();

所以,谢谢约翰,您已经为我整理了一下。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
学习句号时不要跳过基本主题。 :凉:
 

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
学习新语言时不要跳过基本主题 ;)
您是对的,但像所有开发人员一样,我想尽快入手并利用我已经知道的知识。是否有针对学习C#的经验丰富的VB.Net程序员的教程?如果没有,那么MS应该开发一些ASAP,特别是因为已经明确表明VB不会进一步开发,因此会有很多像我这样的人正在过渡。这是一个真正的痛苦阅读材料,它告诉我们我们已经知道的内容,而忽略了我们需要知道的关键思想,因为从我们先前的知识中得出的明显暗示是错误的。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,506
地点
悉尼,澳大利亚
编程经验
10+
我想利用我已经知道的东西。
但是你没有。正如所指出的那样,您在做什么在VB中不会比在C#中更有效。两种语言在类型级别上唯一允许的是声明,并且任何赋值都必须是声明字段的初始化。如果您利用了已经知道的知识,那么最初就不会有问题。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
可悲的是,微软自己没有太多关于从VB.Net迁移到C#的教程。但是有些博客是由MVP撰写的,不是谁涵盖了一些过渡的期望,它们为开发者博​​客提供了一些指示,但是您将需要自己搜索它们,因为我想不出任何特定的博客觉得有用。对于我们中一些使用多种语言编写的人来说,很容易将其视为挑战并不容易。我记得当我决定在C#之后开始使用VB.Net时。...在编写代码时可能会发现有帮助的事情之一就是用您熟悉的语言(例如VB.Net)将其写出来,然后进行翻译如果您无法锻炼应如何使用C#编写代码,请使用C#。这样做可以帮助您建立熟悉度,但不要依赖它作为前进的方向。 在线翻译 对这样的东西有好处。也有来自人们的信息 搜索引擎 正在尝试或考虑进行过渡的人。阅读其中一些文章的一些评论可能会帮助您获得一些额外的指导。您还可以在Visual Studios上找到从VB.Net到C#的转换器,反之亦然 市场.
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,506
地点
悉尼,澳大利亚
编程经验
10+
在线翻译 对这样的东西有好处。
以我的经验,许多在线翻译开始对任何高级内容都感到窒息。如果您希望经常将VB转换为C#,我建议您从有形软件解决方案中下载并安装Instant C#。全面披露,当我成为MVP时,我获得了完整版本的免费许可证,但是该许可证在一段时间之前到期。我仍然不时使用Instant VB和Instant C#的免费版本。
 

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
And yet you didn't.
这在VB中有效
VB.NET:
        Dim Changed_Skip As Boolean = False
        Changed_Skip = True
虽然这在C#中无效
C#:
        bool Changed_Skip = false;
        Changed_Skip = true;
大概VB.Net隐式区分了定义类型的代码和命令式代码(如赋值),而对于C#,则需要使用{}来明确区分。我被误入歧途是因为我根据我以前的知识做出了明显的假设。因此,我希望为像我这样的人提供合适的转换教程。像这样的转换器 代码转换器C#到VB和VB到C#– Telerik 将有效的VB代码呈现为无效的C#。
C#:
{
    bool Changed_Skip = false;
    Changed_Skip = true;
}
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
以我的经验,许多在线翻译开始对任何高级内容都感到窒息。如果您希望经常将VB转换为C#,我建议您从有形软件解决方案中下载并安装Instant C#。全面披露,当我成为MVP时,我获得了完整版本的免费许可证,但是该许可证在一段时间之前到期。我仍然不时使用Instant VB和Instant C#的免费版本。
这个? -- VB.NET转C#转换器 -我以前没听说过试用一下,看看它如何与某些在线翻译版本相提并论会很有趣。我还从VS Market Place发布的那本书还不错。您对大多数在线翻译on之以鼻的代码是正确的。但是我确实暗示OP将其用于简单的音译而不是复杂的方法。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,506
地点
悉尼,澳大利亚
编程经验
10+

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
如果您希望经常将VB转换为C#,我建议您从有形软件解决方案中下载并安装Instant C#。
我从C#开始时就使用Teleele产品很多,现在很少使用,只有当我试图使我知道如何在VB中工作的东西才能工作时,却似乎无法正确使用C#。我已将Instant C#标记为书签。我真正想要的是"VB.Net => C# tutorial"这样我才能理解差异。我认为您会同意,对于具有我的VB经验的人来说,此问题的原因并不明显。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
Instant可以将项目从一种语言转换为另一种语言的事实真的很好。我注意到的唯一似乎是解析中的小错误的地方是它将区域放置在错误的位置。
C#:
//====================================================================================================
//The Free Edition of Instant C# limits conversion output to 100 lines per snippet.

//To purchase the Premium Edition, visit our website:
////www.tangiblesoftwaresolutions.com/order/order-instant-csharp.html
//====================================================================================================

using System;
using System.Windows.Forms;

#region Imports
这实际上令人尴尬,因为我实际上发现了一个已有很多年历史的vb文件。回到我的VB.Net起步之日。 :ROFLMAO: The code is awful.

但是它仍然可以很好地翻译它,而Telerick无法解析它。我将在我的签名中添加一个指向该链接的链接,因为我相信以后将值得参考。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
我真正想要的是"VB.Net => C# tutorial"这样我才能理解差异。
阅读我的签名中的入门链接。如果您想了解该语言。阅读文档(全部),不要跳过任何章节。这样做会破坏学习或试图学习的目的。
 

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
阅读我的签名中的入门链接。如果您想了解该语言。阅读文档(全部),不要跳过任何章节。这样做会破坏学习或试图学习的目的。
谢谢,我已经为此添加了书签,我会在有空的时候仔细阅读它。但是我再说一遍,我真的很喜欢可以帮助我在开发C#专业知识时利用现有VB.NET知识的东西。针对我和像我这样的人的教程将为我们节省大量时间,并鼓励MS大概从VB转向C#。像所有开发人员一样,我很忙,在解决自己的问题时我学得最好,我们不想花更多的时间来了解基本知识和课堂问题。我们中具有VB专业知识的人可以比在开始之前阅读大量的入门文档更有效地提高C#速度。

我要标记这个问题,现在已解决,更早以前,John的评论为我解决了该问题,并且VB和C#规则之间的差异完美地说明了为什么VB =>C#教程将很有价值。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,506
地点
悉尼,澳大利亚
编程经验
10+
我认为您会同意,对于具有我的VB经验的人来说,此问题的原因并不明显。
我完全不同意。除非我缺少任何东西,否则VB会出于完全相同的原因而拒绝等效代码。
 
最佳 底部