小编Oli*_*ier的帖子

迭代Flags Enum中的值?

如果我有一个包含标志枚举的变量,我可以以某种方式迭代该特定变量中的位值吗?或者我是否必须使用Enum.GetValues迭代整个枚举并检查哪些枚举?

c# enums enum-flags

123
推荐指数
8
解决办法
6万
查看次数

当我可以直接实现这些方法时,为什么我应该在C#中使用接口

我知道这是一个非常基本的问题,但是一位采访者以非常戏法的方式问我,我很无奈:(

我只知道接口的材料或理论定义,并且在我工作的许多项目中也实现了它.但我真的不明白为什么以及如何有用.

我也不了解界面中的一件事.即,例如,我们使用

conn.Dispose();在最后一块.但我没有看到该类正在实现或继承IDisposableinterface(SqlConnection)类我的意思.我想知道如何调用方法名称.同样,我不了解Dispose方法是如何工作的,因为我们需要使用我们自己的实现为所有接口方法实现函数体.接口如何被接受或命名为合同?到目前为止,这些问题一直在我心中滚动,坦率地说,我从来没有看到任何能以我能理解的方式解释我的问题的好线程.

MSDN像往常一样看起来非常可怕,没有一行是明确的(伙计们,善意的理由是谁进入高级开发,我强烈认为任何代码或文章应该达到任何人看到它的想法,因此像许多人说的那样,MSDN是没用的).

采访者说:

他有5种方法,他很乐意直接在课堂上实现它,但如果你必须选择抽象类或接口,你选择哪一种,为什么?我确实回答了他在各种博客中读到的所有内容,说明抽象类和界面的优缺点,但他不相信,他试图理解"为什么界面"."为什么抽象类"一般,即使我只能实现相同的方法一次而不是改变它.

我看不到网络中的任何地方,我可以得到一篇文章,可以清楚地解释我的接口及其功能.我是众多程序员中的一员,他们仍然不了解接口(我知道我使用的理论和方法)但不满意我清楚地理解它.

c# oop abstraction interface class

106
推荐指数
6
解决办法
8万
查看次数

如何声明二维字符串数组?

string[][] Tablero = new string[3][3];
Run Code Online (Sandbox Code Playgroud)

我需要一个3x3阵列安排来保存信息.我如何在C#中声明这个?

c# arrays jagged-arrays multidimensional-array array-initialization

75
推荐指数
10
解决办法
22万
查看次数

在C#中反转单个链表

我试图扭转链表.这是我提出的代码:

 public static void Reverse(ref Node root)
 {
      Node tmp = root;
      Node nroot = null;
      Node prev = null;

      while (tmp != null)
      {
          //Make a new node and copy tmp
          nroot = new Node();    
          nroot.data = tmp.data;

          nroot.next = prev;
          prev = nroot;   
          tmp = tmp.next;
       }
       root = nroot;            
  }
Run Code Online (Sandbox Code Playgroud)

它运作良好.想知道是否有可能避免创建新节点.想对此有所建议.

c# reverse singly-linked-list

27
推荐指数
5
解决办法
3万
查看次数

字符串实习?

第二个ReferenceEquals调用返回false.为什么s4中的字符串没有被中断?(我不关心StringBuilder优于字符串连接的优点.)

string s1 = "tom";
string s2 = "tom";


Console.Write(object.ReferenceEquals(s2, s1)); //true

string s3 = "tom";
string s4 = "to";
s4 += "m";

Console.Write(object.ReferenceEquals(s3, s4)); //false
Run Code Online (Sandbox Code Playgroud)

当我这样做时String.Intern(s4);,我仍然是假的.

在这里,s3和s4都被实习,但它们的引用不相等?

string s3 = "tom";
string s4 = "to";
s4 += "m";
String.Intern(s4);

Console.WriteLine(s3 == s4); //true
Console.WriteLine(object.ReferenceEquals(s3, s4)); //false
Console.WriteLine(string.IsInterned(s3) != null);  //true (s3 is interned)
Console.WriteLine(string.IsInterned(s4) != null);  //true (s4 is interned)
Run Code Online (Sandbox Code Playgroud)

c# string clr reference string-interning

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

How can I use impersonation to manipulate files/directories on a remote machine with UNC?

I need to download files from a server to a shared drive directory, creating the directory if it doesn't exist. There are a few things making this more complicated:

  1. I do not have write access (nor does the account that will run the job in UAT/Prod) to the shared drive directory.
  2. The Service account that does have write access does not have any privileges anywhere but the shared drive directory.

I attempt to impersonate, as so:

class Impersonation
{
    const …
Run Code Online (Sandbox Code Playgroud)

c# impersonation unc remote-access file-manipulation

7
推荐指数
1
解决办法
167
查看次数

C#局部变量初始化 - 初学者的问题

我正在阅读MCTS Self Paced Training Kit(70-536)Edition 2,在第1章我们有以下内容.

如何声明值类型变量要使用类型,必须首先将符号声明为该类型的实例.值类型具有隐式构造函数,因此声明它们会自动实例化类型; 您不必像处理类一样包含New关键字.构造函数为新实例分配一个默认值(通常为null或0),但是您应该始终在声明中显式初始化该变量,如以下代码块所示:

'VB

Dim b As Boolean = False    

// C#  
bool b = false;
Run Code Online (Sandbox Code Playgroud)

但是,当我编译以下控制台应用程序时,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch1_70_536
{
    class Program
    {
        static void Main(string[] args)
        {
            bool b;
            Console.WriteLine("The value of b is " + b);
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到编译时错误

"使用未分配的局部变量b"

勘误表中甚至没有提到它.我做错了还是这本书完全错了?

c# variables initialization

5
推荐指数
2
解决办法
7385
查看次数

检索具有CLSID的组件的COM类工厂-未注册的类

我试图在PC(OS Win7,64位)上运行Windows应用程序(winForm但它显示了此错误或异常:

由于以下错误,无法为具有CLSID {00853A19-BD51-419B-9269-2DABE57EB61f}的组件检索COM类工厂:80040154未注册类(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))。

我谷歌搜索,发现我应该需要为x86构建(虽然当前窗口是64位)。我这样做了,但是得到了同样的错误。在那之后,我现在尝试安装zkeeper依赖项,但出现此错误:

在此处输入图片说明

模块D:\ TheSDK \ zkemkeeper.dll“可能与您正在运行的Windows版本不兼容。请检查该模块是否与regsvr32.exe的x86或x64版本兼容。

这是批处理文件(Dependency SDK安装程序):

cd /d %~dp0
if /i "%PROCESSOR_IDENTIFIER:~0,3%"=="X86" (
    echo system is x86
    copy .\*.dll %windir%\system32\
    regsvr32 %windir%\system32\zkemkeeper.dll

    ) else (
        echo system is x64
        copy .\*.dll %windir%\SysWOW64\
        regsvr32 %windir%\SysWOW64\zkemkeeper.dll

    )
Run Code Online (Sandbox Code Playgroud)

更新:即使我尝试手动运行和安装regsvrsystem32和64,仍然出现相同的错误。

c# com exception winforms zkemkeeper

5
推荐指数
0
解决办法
276
查看次数

如果该类没有构造函数,.Net将该类中的所有值设置为“默认值”是什么?

在使用.Net的c#中,如果创建具有未初始化字段且没有构造函数的类,然后使用new关键字创建该类的实例,则.Net会将字段的值设置为“默认值”。这到底是什么意思呢?是否曾经有过将值设置为Null的情况?

.net c# class default-constructor

4
推荐指数
2
解决办法
64
查看次数

如何用相同的方法和继承编写2个类?

我有X类,它们具有不同的信息和计算方法,应该共享但可以覆盖,所以:

class Rule1 {
    int type = 1;
    string name = "Rule";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule2 {
    int type = 2;
    string name = "Rule2";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule3 {
    int type = 3;
    string name = "Rule3";
    public float Calc()
    {
        return 3 + 4 + type; // DIFFERENT
    }
}
Run Code Online (Sandbox Code Playgroud)

我要在调用方法中编写的内容如下:

class Calculator
{ …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism inheritance encapsulation abstraction

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

Visual Studio 2017不支持定位.NET Core 3.0

我尝试在Visual Studio 2017-版本15.9.16中安装SDK 3.0.1。当我打开一个新的Web应用程序时,出现一条错误消息:

严重性代码说明项目文件行抑制状态错误NETSDK1045目前.NET SDK不支持针对.NET 3.0的核心。无论是目标.NET 2.2的核心或降低,或使用一个版本的.NET SDK,它支持.NET 3.0的核心。 IdentityServer-C:\ ProgramFiles \ dotnet \ sdk \ 2.2.106 \ Sdks \ Microsoft.NET.Sdk \ targets \ Microsoft.NET.TargetFrameworkInference.targets 137

我的网点信息:

 dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   3.0.100
 Commit:    04339c3a26

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.17763
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100\

Host (useful for support):
  Version: 3.0.0
  Commit:  7d57652f33

.NET Core SDKs installed:
  1.0.4 [C:\Program Files\dotnet\sdk]
  2.1.2 [C:\Program Files\dotnet\sdk]
  2.1.202 [C:\Program Files\dotnet\sdk] …
Run Code Online (Sandbox Code Playgroud)

c# sdk visual-studio-2017 .net-core-3.0

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

在数组中优先选择高索引号而不是低索引号

假设我有两个带有5个单元格的排序数组:

数组中的数字在2到14之间(包括2到14,它们是整数)

现在,当最低的数组为:[0,100]时,我需要给每个数组一个等级:

[2,2,2,2,2],最高为[14,14,14,14,14]

现在的事情是:索引很重要,因此例如,如果我们看一下这些数组:

1)[2,2,2,2,10]

2)[8,8,8,8,9]

因此,第一个比第二个更好,并且得分会更高。

并且如果索引中有一个领带(从右到左),例如:

1)[3,4,5,10,13]

2)[3,4,7,10,13]

因此索引编号:3和4相同,但是由于7高于5。因此,在这种情况下,第二个数组的得分更高。

我在数学上苦苦挣扎,我想提高效率,现在我可以做类似的事情:

2 ^ array [i]但效率不高,所以我设法做的主要事情是

double rank = 0;
for (int i = 0; i < 5; i++)
{
    rank += (double)array[i] / 14 + i;
}
Run Code Online (Sandbox Code Playgroud)

因为如果array [i]可以在2到14之间,那么1/7 <= array [i] / 14 <= 1,所以我认为如果每次迭代都添加+ i,那么下一个迭代将大于所有以前的那些,但这是错误的。

我很乐意在这里提供一些帮助。

c# arrays algorithm integer

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