我最近将一个VB类转换为C#,似乎我遇到了一个问题;我想我知道如何解决这个问题但是在我阅读的所有内容中,我现在正在寻求更明确的答案。 考虑下面的代码,里面有一个结构FileDetail(这只是一个例子 - 所以请不要假设它是FileDetail,就像在文件中一样..) Struct需要在内部和外部访问 - 它们通过值而不是引用类型传递,因此struct似乎是这里的方式而不是类(查看整个代码)。在表单类MyForm中,我得到了在IAFT类中不存在FileDetails的错误。
public class IAFT
{
public struct FileDetail
{
public string FileType;
public int FileNumber;
}
}
public class MyForm
{
MyForm()
{
public IAFT.FileDetail fd = new IAFT.FileDetail();
// IAFT.FileDetail
}
}
我知道的错误。 “IAFT”类型中不存在类型名称“ FileDetail ”(CS0426) VS2013中的红色标准属于类型声明;左侧的任务。
如果有任何帮助,两者都在同一名称空间中。
我已经阅读了关于SO的帖子告诉我我可以声明我的变量fd就像它在上面一样(因为我没有实例而对我没有意义 - 但我试过了。)我不想创建一个实例获得一个实例;我相信我想要一个存在于IAFT实例中的那个。也许有一些我不理解的东西。
我应该将结构封装为类吗? 我应该把结构放在IAFT类之外吗? [这就是我认为我应该做的。]
我应该做点什么吗?
答案 0 :(得分:1)
您的代码示例错误,无法编译。您的错误是您正在进行交易
public IAFT.FileDetail fd = new IAFT.FileDetail();
在公共构造函数中。您不能在函数范围变量中声明范围。如果您将公开声明关闭,则代码编译就可以了。
所以试试这个;
public class IAFT
{
public struct FileDetail
{
public string FileType;
public int FileNumber;
}
}
public class MyForm
{
public MyForm()
{
IAFT.FileDetail fd = new IAFT.FileDetail();
}
}
嵌套课程是非常好的做法。
答案 1 :(得分:0)
没有必要执行struct static也不需要将它移到外面,问题在于你在一个函数中声明var为public,而且这是不允许的,localvariables没有访问修饰符,因为它们是本地的。
试试这个:
try
Dim conn As SqlConnection = New SqlConnection (System.Configuration.ConfigurationManager.ConnectionStrings("DefaultDataBaseServer").ConnectionString)
conn.Open()
Dim sql As String = lblConcept.Text.Replace("@xxxxxx", xxxxxID.Value)
Dim myCommand As SqlCommand = New SqlCommand(sql, conn)
ckConceptList.DataSource = myCommand.ExecuteReader()
ckConceptList.DataBind()
Catch ex As Exception
Finally
If pConn.State = ConnectionState.Open Then
pConn.Close()
End If
End Try
答案 2 :(得分:-5)
我会这样:
public class IAFT
{
fileDetail FileDetail = new fileDetail();
}
public class fileDetail
{
public string FileType;
public int FileNumber;
}
public class MyForm
{
MyForm()
{
IAFT.FileDetail.FileType = "test";
//IAFT.FileDetail
}
}
我希望它有效,我还没有测试过。