如果我有一个包含标志枚举的变量,我可以以某种方式迭代该特定变量中的位值吗?或者我是否必须使用Enum.GetValues迭代整个枚举并检查哪些枚举?
我知道这是一个非常基本的问题,但是一位采访者以非常戏法的方式问我,我很无奈:(
我只知道接口的材料或理论定义,并且在我工作的许多项目中也实现了它.但我真的不明白为什么以及如何有用.
我也不了解界面中的一件事.即,例如,我们使用
conn.Dispose();在最后一块.但我没有看到该类正在实现或继承IDisposableinterface(SqlConnection)类我的意思.我想知道如何调用方法名称.同样,我不了解Dispose方法是如何工作的,因为我们需要使用我们自己的实现为所有接口方法实现函数体.接口如何被接受或命名为合同?到目前为止,这些问题一直在我心中滚动,坦率地说,我从来没有看到任何能以我能理解的方式解释我的问题的好线程.
MSDN像往常一样看起来非常可怕,没有一行是明确的(伙计们,善意的理由是谁进入高级开发,我强烈认为任何代码或文章应该达到任何人看到它的想法,因此像许多人说的那样,MSDN是没用的).
采访者说:
他有5种方法,他很乐意直接在课堂上实现它,但如果你必须选择抽象类或接口,你选择哪一种,为什么?我确实回答了他在各种博客中读到的所有内容,说明抽象类和界面的优缺点,但他不相信,他试图理解"为什么界面"."为什么抽象类"一般,即使我只能实现相同的方法一次而不是改变它.
我看不到网络中的任何地方,我可以得到一篇文章,可以清楚地解释我的接口及其功能.我是众多程序员中的一员,他们仍然不了解接口(我知道我使用的理论和方法)但不满意我清楚地理解它.
string[][] Tablero = new string[3][3];
Run Code Online (Sandbox Code Playgroud)
我需要一个3x3阵列安排来保存信息.我如何在C#中声明这个?
c# arrays jagged-arrays multidimensional-array array-initialization
我试图扭转链表.这是我提出的代码:
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)
它运作良好.想知道是否有可能避免创建新节点.想对此有所建议.
第二个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) 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:
I attempt to impersonate, as so:
class Impersonation
{
const …Run Code Online (Sandbox Code Playgroud) 我正在阅读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"
在勘误表中甚至没有提到它.我做错了还是这本书完全错了?
我试图在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,仍然出现相同的错误。
在使用.Net的c#中,如果创建具有未初始化字段且没有构造函数的类,然后使用new关键字创建该类的实例,则.Net会将字段的值设置为“默认值”。这到底是什么意思呢?是否曾经有过将值设置为Null的情况?
我有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) 我尝试在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) 假设我有两个带有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# ×12
abstraction ×2
arrays ×2
class ×2
.net ×1
algorithm ×1
clr ×1
com ×1
enum-flags ×1
enums ×1
exception ×1
inheritance ×1
integer ×1
interface ×1
oop ×1
polymorphism ×1
reference ×1
reverse ×1
sdk ×1
string ×1
unc ×1
variables ×1
winforms ×1
zkemkeeper ×1