我试过这两个块,但它返回相同的值.我没有描述更多,我只是展示代码:
Dim f As Nullable(Of Integer)
If f = 1 Then
Console.WriteLine("Equal")
Else
Console.WriteLine("Not Equal")
End If
Run Code Online (Sandbox Code Playgroud)
它提示我"不等于"
我只是添加了一个NOT,我想要得到NOT答案,但我和上面一样!
Dim f As Nullable(Of Integer)
If Not f = 1 Then
Console.WriteLine("Equal")
Else
Console.WriteLine("Not Equal")
End If
Run Code Online (Sandbox Code Playgroud)
它正确地在C#中工作......
对于每个新创建的C#项目,Visual Studio 2010都添加了一些默认引用,例如System,System.Core,System.Xml等.这些默认引用的好处是您可以直接使用它们而无需手动添加它们.
我想知道是否有办法添加第三方程序集作为默认引用,这样我每次创建项目时都不需要添加它.
我正在将最初用VB.NET编写的程序移植到Java.我正在读取一个以小端序存储32位浮点数的文件.
原始程序执行此操作:
Dim br As BinaryReader = ...
Dim f_vb As Single = br.ReadSingle
Run Code Online (Sandbox Code Playgroud)
Java是大端,所以我在转换为float之前反转字节.
RandomAccessFile raf = // ...
int i = raf.readInt();
int bigEndian = Integer.reverseBytes(i);
float f_java = Float.intBitsToFloat(bigEndian);
Run Code Online (Sandbox Code Playgroud)
据我所知,f_vb并f_java包含相同的位.也就是说,BitConverter.ToInt32on f_vb和Float.floatToIntBits(和floatToRawIntBits)on f_java给出相同的东西.但是,花车并不相同.例如,让我们bigEndian == 0x4969F52F.Java将报告958290.94,VB.NET将报告958290.938.我猜这是因为JVM和CLR处理浮点数的方式有所不同,但我对浮点问题知之甚少以找出原因.这种精度的损失导致了线路故障,所以我想确定来源.
我是Visual C++的绝对新手,因此我不得不问你,如何在托管C++项目(Visual Studio 2008)中创建一个带有一个或多个函数的托管类模块(新类)?如果按下按钮,我将如何调用类的方法.我无法理解关于它的非常复杂的教程,大多数教程都涉及非托管代码或旧版Visual Studio.我自己的尝试完全失败并且只产生了错误,因为我没有找到关于如何向Visual C++托管项目添加新类文件的正确选项.如果我选择一个新的"CLR组件类",我会收到一条警告消息,告诉我填充屏幕右侧窗格的组件.如果我选择一个新的"CLR Windows Form Class",它什么都不会发生,没有添加扩展名为".class"的文件,或者我不知道新添加的文件.我只需要一个非常基本的类文件,其中包含一个公共函数,我可以从项目的任何位置调用它.
我有一个非常大的main()cpp文件(main.cpp),里面有很多函数.大约有几千个函数或更多函数,因此搜索或滚动变得困难.现在我想将这些1000个函数中的一些放在我当前项目中的第二个cpp文件中(在Visual Basic 6中,它简称为CSharp中的"新模块",它被称为"新类文件").问题是,一旦我将它们从main.cpp移到module1.cpp,我就无法在Visual C++中调用这个函数.
这就是我不想要的:
我知道有一种方法可以创建一个简单的类,然后创建一个这个类的新对象来使用它的方法.这就是我想要的.Google中关于此的示例对我不起作用,因为它们适用于Visual Studio的早期版本,与我的版本不兼容.从这个例子我知道我想要什么,但我没有在Visual Studio 2008中实现它的知识.
我想知道在属性中正确使用锁.我正在编写一个多线程服务器应用程序,其中吞吐量非常重要.如果我有一个声明的属性:
private DataPoint a;
private object aLock = new object();
Run Code Online (Sandbox Code Playgroud)
最保守的锁似乎如下(称之为方法1).但是,在这种情况下,在初始调用之后的每次调用中,都会有锁的开销:
public DataPoint A
{
get
{
lock (aLock)
{
if (a == null)
{
a = new DataPoint();
}
return a;
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我应该将锁定移动到设置"a"的行(称之为方法2).在这种情况下,有可能将"a"设置多次(这是Ok),但是一旦设置,就没有锁的开销.
public DataPoint A
{
get
{
if (a == null)
{
lock(aLock)
{
a = new DataPoint();
}
}
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
锁定并发访问属性的推荐方法是什么?它是方法1,方法2还是以上都没有?
谢谢.
我觉得这经常被误解,我总是在两者之间感到困惑.当我们说CLR功能(.NET功能)或C#功能时,它们是相同的还是不同的
编辑:我觉得大多数人都误解了我的问题.我不是要问C#和.NET之间的核心区别,而是对功能明智的分类并不感兴趣.像垃圾收集是CLR功能或匿名类型是语言功能,依此类推
我正在处理大量数据,并使用CLR进行处理.CLR处理工作很快,但我需要一种快速方法将处理后的数据移动到数据库(通过CLR).
例如,请参阅以下clr代码
protected static string Normalize(string s) // space and special character remover
{
char[] arr = s.ToCharArray();
arr = Array.FindAll<char>(arr, (c => char.IsLetterOrDigit(c)));
return new string(arr).ToLower();
}
[Microsoft.SqlServer.Server.SqlProcedure]
public static void udpNormStr ()
{
SqlConnection con = new SqlConnection("context connection = true");
SqlCommand cmd = new SqlCommand("Select cName from NamesTable", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
DataTable fill = new DataTable();
fill.Columns.Add("NormName", typeof(string));
da.Fill(dt);
cmd.CommandText = "insert into NormTable values (@nName)";
cmd.Parameters.Add("@nName", SqlDbType.VarChar);
foreach …Run Code Online (Sandbox Code Playgroud) 我正在努力研究ngen和泛型集合.我已经在解决方案中使用了所有程序集,但是每当我的应用程序执行该代码时,仍会以某种方式进行jitting:
private Dictionary<int, bool> VerifyedFunc;
public SecurityProvider()
{
...
VerifyedFunc = new Dictionary<int, bool>();
...
}
Run Code Online (Sandbox Code Playgroud)
MDA消息:
Managed Debugging Assistant 'JitCompilationStart' has detected a problem in '*.exe'.
Additional Information:
<mda:msg xmlns:mda="http://schemas.microsoft.com/CLR/2004/10/mda">
<mda:jitCompilationStartMsg break="true">
<method name="mscorlib!System.Collections.Generic.Dictionary`2::.ctor"/>
</mda:jitCompilationStartMsg>
</mda:msg>
Run Code Online (Sandbox Code Playgroud)
NGen和泛型集合是否存在一些问题?
在开发用于通过JSON与外部数据库通信的类库时,出现了一个有趣的问题,即对象实例的向上转换导致其先前的非空成员之一显示为null.
在试图弄清楚这种奇怪的原因时,许多头发被撕掉了,但到目前为止,我找不到合理的解释是不成功的.
以下是此问题的示例:
using System;
namespace Test
{
public class Program
{
static void Main(string[] args)
{
Descendant d = new Descendant();
d.Attributes.ToString(); // Everything fine here
Ancestor a = (Ancestor)d;
a.Attributes.ToString(); // NullPointerException
}
}
class Ancestor
{
public interface IAttributes { }
public IAttributes Attributes;
}
class Descendant : Ancestor
{
public new DescendantAttributes Attributes;
public Descendant()
{
this.Attributes = new DescendantAttributes();
}
public class DescendantAttributes : IAttributes
{
public string Name = "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息: …
clr ×10
.net ×6
c# ×6
vb.net ×2
bulkinsert ×1
class ×1
concurrency ×1
function ×1
inheritance ×1
java ×1
jvm ×1
managed ×1
ngen ×1
nullable ×1
optimization ×1
sql ×1
sql-server ×1
visual-c++ ×1
winforms ×1