相关疑难解决方法(0)

643
推荐指数
15
解决办法
33万
查看次数

在结构上使用"new"在堆或堆栈上分配它吗?

使用new运算符创建类的实例时,将在堆上分配内存.当您使用new运算符创建结构的实例时,在堆上还是堆栈上分配内存?

.net c# memory-management

281
推荐指数
4
解决办法
8万
查看次数

C#6结构中的无参数构造函数

我的理解是现在允许结构中的无参数构造函数.

但是下面的代码在VS 2015社区中给出了编译错误

public struct Person 
{ 
    public string Name { get; } 
    public int Age { get; } 
    public Person(string name, int age) { Name = name; Age = age; } 
    public Person() : this("Jane Doe", 37) { } 
}
Run Code Online (Sandbox Code Playgroud)

错误:"结构不能包含显式无参数构造函数"

谁知道为什么?

c# c#-6.0

28
推荐指数
1
解决办法
8464
查看次数

在struct上隐藏无参数构造函数

是否可以在c#中隐藏用户的无参数构造函数

我想强制他们总是使用带参数的构造函数

例如这个职业课程

public struct Position
{
    private readonly int _xposn;
    private readonly int _yposn;

    public int Xposn
    {
        get { return _xposn; }
    }

    public int Yposn
    {
        get { return _yposn; }
    }

    public Position(int xposn, int yposn)
    {
        _xposn = xposn;
        _yposn = yposn;
    }        
}
Run Code Online (Sandbox Code Playgroud)

我只希望用户能够通过指定x和y坐标来新建位置

但是,无参数构造函数始终可用

我不能把它私有化.甚至将其定义为公开

我已经读过这个 为什么我不能在.NET中为结构定义默认构造函数?

但它并没有真正的帮助

如果这是不可能的 - 检测我被传递的位置是否具有值的最佳方法是什么?

明确检查每个属性字段?有一种更光滑的方式吗?

谢谢

.net c# struct

26
推荐指数
2
解决办法
1万
查看次数

结构初始化和默认参数的不直观行为

public struct Test 
{
    public double Val;
    public Test(double val = double.NaN) { Val = val; }
    public bool IsValid { get { return !double.IsNaN(Val); } }
}

Test myTest = new Test();
bool valid = myTest.IsValid;
Run Code Online (Sandbox Code Playgroud)

上面给出了valid==true因为没有调用默认arg的构造函数,并且使用标准默认值val = 0.0创建了对象.
如果结构是一个类,那么行为就是valid==false我所期望的.

我发现这种行为上的差异,特别是结构案例中的行为令人惊讶和不直观 - 发生了什么?stuct构造的默认arg服务是什么? 如果它无用为什么要让这个编译?

更新:澄清这里的重点不在于行为是什么 - 而是为什么在没有警告的情况下进行编译并且行为不直观.即如果没有应用默认的arg,因为在新的Test()情况下没有调用构造函数,那么为什么要让它编译?

.net c# struct default-constructor default-arguments

18
推荐指数
1
解决办法
872
查看次数

覆盖结构中的默认值(c#)

是否可以设置或覆盖结构的默认状态?

作为一个例子,我有一个

enum something{a,b,c,d,e};
Run Code Online (Sandbox Code Playgroud)

以及为该枚举链接2个值的结构

struct SomethingData
{
    something type;
    int Value;
    double Multipler;

    SomethingData(something enumVal, int intVal, double DblVal) {...}
}
Run Code Online (Sandbox Code Playgroud)

但是我可以指定默认状态

SomethingData(something.c,0,1);
Run Code Online (Sandbox Code Playgroud)

c# struct defaults

17
推荐指数
2
解决办法
2万
查看次数

C#编译器错误:"结构中不能有实例字段初始值设定项"

我需要有关结构的建议.

我有两段代码.第一部分如下:

namespace Project.GlobalVariables
{
    class IOCard
    {
        struct InputCard
        {
            public string CardNo;
            public int BaseAddress;
            public int LowerAddress;
            public int UpperAddress;
            public int[] WriteBitNo = new int[16];
            public int[] ReadBitNo = new int[16];
        }

        static InputCard[] InputCards = new InputCard[5];

        public static string ACardNo = InputCards[1].CardNo;
        public static string BCardNo = InputCards[2].CardNo;

    }
}
Run Code Online (Sandbox Code Playgroud)

第二部分如下:

private void Form1_Load(object sender, EventArgs e)
    {
        IOCard.ACardNo = "Card A";
        IOCard.BCardNo = "Card B";

        MessageBox.Show(IOCard.ACardNo);
        MessageBox.Show(IOCard.BCardNo);
    }
Run Code Online (Sandbox Code Playgroud)

我的计划是能够InputCards使用IOCard如下所示分配和检索组件 …

c#

15
推荐指数
4
解决办法
3万
查看次数

C#Struct No无参数构造函数?看看我需要完成什么

我使用结构传递给非托管DLL,因为 -

[StructLayout(LayoutKind.Sequential)]
        public struct valTable
        {
            public byte type;
            public byte map;
            public byte spare1;
            public byte spare2;
            public int par;
            public int min;
            public byte[] name;
            public valTable()
            {
                name = new byte[24];
            }
        }
Run Code Online (Sandbox Code Playgroud)

上面的代码将无法编译,因为VS 2005会抱怨"Structs不能包含显式无参数构造函数".为了将这个结构传递给我的DLL,我必须像这样传递一个struct数组valTable[] val = new valTable[281];

我想说的是,当我说new,构造函数被调用并且它创建了一个像我试图演示的字节数组,因为DLL正在寻找每个维度中大小为24的字节数组.

我怎么能做到这一点?

c# dll constructor struct dllimport

14
推荐指数
2
解决办法
1万
查看次数

为什么C++中的void方法可以返回void值,但在其他语言中它不能?

该程序在C++中编译和运行,但不是Java和C#等多种语言.

#include <iostream>
using namespace std;

void foo2() {
  cout << "foo 2.\n";
}

void foo() {
    return foo2();
}

int main() {

    foo();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Java中,这给出了编译器错误,如'Void方法无法返回值'.但由于被调用的方法本身就是一个void,因此它不返回值.我知道为了便于阅读,可能会禁止这样的结构.还有其他异议吗?

编辑:为了将来的参考,我在这里发现了一些类似的问题return-void-type-in​​-c-and-c 我个人认为这个问题还没有回答.回复'因为它在规范中这样说,继续'不会削减它,因为有人必须首先编写规范.也许我应该问'允许返回像C++这样的void类型有什么优缺点'?

c# c++ java void

14
推荐指数
1
解决办法
595
查看次数

为什么不必初始化数组中的结构?

我研究了这个主题,但我找不到任何重复.我想知道为什么你可以struct在数组中使用a 而不创建它的实例.

例如,我有一个class和一个struct:

public class ClassAPI
{
    public Mesh mesh { get; set; }
}

public struct StructAPI
{
    public Mesh mesh { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ClassAPI在阵列中使用时,它必须与所述初始化new能够使用其属性和方法之前的关键字:

ClassAPI[] cAPI = new ClassAPI[1];
cAPI[0] = new ClassAPI(); //MUST DO THIS!
cAPI[0].mesh = new Mesh();
Run Code Online (Sandbox Code Playgroud)

但事实并非如此StructAPI.看起来好像StructAPI不必在数组中初始化:

StructAPI[] sAPI = new StructAPI[1];
sAPI[0].mesh = new Mesh();
Run Code Online (Sandbox Code Playgroud)

如果你尝试同样的事情ClassAPI,你会得到一个NullReferenceException.

在阵列中使用它们时,为什么它与结构不同?

我理解上的差异之间class,并structstruct …

c# arrays struct unity-game-engine

14
推荐指数
1
解决办法
479
查看次数