我不明白常规连接和连接池之间的语法区别是什么.
当我使用using密钥时,例如:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
这是执行连接池的方法吗?
我想知道为什么泛型类型参数的新约束只能在没有参数的情况下应用,也就是说,可以将类型约束为具有无参数构造函数,但是不能将类约束为具有构造函数,接收一个int作为参数.我知道这方面的方法,使用反射或工厂模式,工作正常,好吧.但我真的很想知道为什么,因为我一直在思考它,我真的想不出无参数构造函数和带有参数的区别,这些参数可以证明对新约束的这种限制.我错过了什么?非常感谢
@Eric:让我和你在一起一会儿:
构造函数是方法
那么我想如果我这样做,没有人会反对:
public interface IReallyWonderful
{
new(int a);
string WonderMethod(int a);
}
Run Code Online (Sandbox Code Playgroud)
但是一旦我有了,那我就去:
public class MyClass<T>
where T : IReallyWonderful
{
public string MyMethod(int a, int b)
{
T myT = new T(a);
return myT.WonderMethod(b);
}
}
Run Code Online (Sandbox Code Playgroud)
这首先是我想要做的.所以,抱歉,但不,构造函数不是方法,或者至少不完全.
关于实现这个功能的困难,我真的不知道,即使我这样做了,我对于明智地支出股东资金的决定也没什么可说的.这样的话,我会马上把它标记为答案.
从学术(我)的角度来看,也就是说,没有任何关于实施成本的问题,问题确实是(我在最近几个小时内完成了这个问题):
构造函数应该被视为类的实现的一部分,还是作为语义契约的一部分(以同样的方式将接口视为语义契约).
如果我们将构造函数视为实现的一部分,那么,约束泛型类型参数的构造函数不是一件非常通用的事情,因为这会将你的泛型类型绑定到具体的实现,并且几乎可以说为什么完全使用泛型?
作为实现的一部分的构造函数的示例(在指定任何下面的构造函数作为定义的语义契约的一部分时没有意义ITransformer):
public interface ITransformer
{
//Operates with a and returns the result;
int Transform(int a);
}
public class PlusOneTransformer : ITransformer
{
public int Transform(int a)
{
return a …Run Code Online (Sandbox Code Playgroud) 我在Windows窗体的面板上动态生成控件,我还生成了一个用于删除控件的按钮,所有控件都在行中.
int c = 0;
private void button1_Click(object sender, EventArgs e)
{
int v;
v = c++;
panel1.VerticalScroll.Value = VerticalScroll.Minimum;
ComboBox combo = new ComboBox();
combo.Name = "combobox" + v ;
combo.Location = new Point(30, 5 + (30 * v));
ComboBox combo2 = new ComboBox();
combo2.Name = "combobox2" + v ;
combo2.Location = new Point(170, 5 + (30 * v));
TextBox txt = new TextBox();
txt.Name = "txtbx" + v;
txt.Location = new Point(300, 5 + (30 * v));
TextBox …Run Code Online (Sandbox Code Playgroud) 我有一个演示项目,它创建一个程序集并使用它.我也可以调试注入的代码.但是,如果我进行覆盖,分析或分析,它会被计算,但我想测量它.
码:
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false; // debug enabled
parameters.OutputAssembly = "DynamicCode.dll"; // if specified creates the DLL
parameters.IncludeDebugInformation = true;
CompilerResults results = icc.CompileAssemblyFromFile(parameters, "InjectedCode.cs.txt");
Run Code Online (Sandbox Code Playgroud)
我创建DLL来检查生成的IL代码.我可以在VS中调试代码.但是当我运行coverage时,如果我使用TEMP目录,或者如果我输出DLL(如上所述),则生成的程序集就会被遗漏,因此覆盖范围中不包含任何FILE(因此甚至不包括主程序集).
当我运行分析时,我只能看到调用(反射),但没有看到生成的代码.当我进行分析时(我在注入的代码中有一些错误,例如未使用的本地,以及所有内容的ofc分析),注入的代码没有报告任何问题.注入的代码:
namespace CodeInjection
{
public static class DynConcatenateString
{
public static string Concatenate(string s1, string s2){
// System.Diagnostics.Debugger.Break(); // break here for debugger and also test comment output
int a = 1+2+3+4+5; // complicated math
int b …Run Code Online (Sandbox Code Playgroud) .net c# dynamic-language-runtime code-injection visual-studio-2012
说我有这个班:
public class Animal : IEquatable<Animal>
{
public string Name { get; set; }
public bool Equals(Animal other)
{
return Name.Equals(other.Name);
}
public override bool Equals(object obj)
{
return Equals((Animal)obj);
}
public override int GetHashCode()
{
return Name == null ? 0 : Name.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试:
var animals = new[] { new Animal { Name = "Fred" } };
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做时:
animals.ToList().Contains(new Animal { Name = "Fred" });
Run Code Online (Sandbox Code Playgroud)
它调用正确的泛型Equals重载.问题在于数组类型.假设我这样做:
animals.Contains(new Animal { Name = "Fred" });
Run Code Online (Sandbox Code Playgroud)
它调用 …
我有一个具有以下构造函数的类
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
InitializeComponent();
compositeObject = CompositeObject;
}
Run Code Online (Sandbox Code Playgroud)
以及没有参数的默认构造函数.
接下来我正在尝试创建一个实例,但它只能在没有参数的情况下工作:
var designer = Activator.CreateInstance(designerAttribute.Designer);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果我想传递参数,它不会:
var designer = Activator.CreateInstance(designerAttribute.Designer, new DelayComposite(4));
Run Code Online (Sandbox Code Playgroud)
这导致MissingMethodException:
未找到构造函数类型Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesigner
这里有什么想法?
问题是我真的需要在施工期间传递一个物体.
你看我有一个设计器,它加载了从中继承的所有类型CompositeBase.然后将这些添加到列表中,用户可以从中将它们拖动到设计器.执行此操作后,将拖动的实例添加到设计器中.这些类中的每一个都定义了自定义属性:
[CompositeMetaData("Delay","Sets the delay between commands",1)]
[CompositeDesigner(typeof(DelayCompositeDesigner))]
public class DelayComposite : CompositeBase
{
}
Run Code Online (Sandbox Code Playgroud)
当用户选择设计器中的项目时,它会查看这些属性以便为该类型加载设计器.例如,在它的情况下,DelayComposite它将加载具有标签和滑块的用户控件,该标签和滑块允许用户设置DelayComposite实例的"延迟"属性.
到目前为止,如果我没有将任何参数传递给构造函数,这可以正常工作.设计者创建一个实例DelayCompositeDesigner并将其分配给WPF的content属性ContentPresenter.
但由于该设计人员需要在设计器中修改所选属性,因此DelayComposite
我必须将此实例传递给它.这就是为什么构造函数看起来像这样:
public DelayCompositeDesigner(DelayComposite CompositeObject)
{
InitializeComponent();
compositeObject = CompositeObject;
}
Run Code Online (Sandbox Code Playgroud)
欢迎提出建议
@VolkerK
您的代码的结果是这样的:
<---- foo Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor()Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor(Vialis.LightLink.Controller.Scenarios.Composites.DelayComposite)param:Vialis .LightLink.Controller.Scenarios.Composites.DelayComposite foo ---->
Leppie,你是对的,我出于某种原因在我的UI应用程序中引用了Composites程序集......这不是我在运行时加载它时应该做的事情.以下代码有效:
object …Run Code Online (Sandbox Code Playgroud) 我想用C#创建数组10*10*10 int[][][](不是int[,,]).
我可以写代码:
int[][][] count = new int[10][][];
for (int i = 0; i < 10; i++) {
count[i] = new int[10][];
for (int j = 0; j < 10; j++)
count[i][j] = new int[10];
}
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种更美好的方式.可能是这样的:
int[][][] count = new int[10][10][10];
Run Code Online (Sandbox Code Playgroud) 我有这样的连接字符串:
"SERVER=localhost;DATABASE=tree;UID=root;PASSWORD=branch;Min Pool Size = 0;Max Pool Size=200"
Run Code Online (Sandbox Code Playgroud)
如何从中获取各种数据库参数?我可以像这样得到数据库名称和服务器:
serverName = conObject.DataSource;
dbName = conObject.Database;
Run Code Online (Sandbox Code Playgroud)
我也需要用户名和密码.MySqlConnection对象上未设置任何属性.
目前我这样做:
public static void GetDatabaseParameters(string connectionString, out string serverName, out string dbName, out string userName, out string password)
{
Match m = Regex.Match(connectionString, "SERVER=(.*?);DATABASE=(.*?);UID=(.*?);PASSWORD=(.*?);.*");
//serverName = m.Groups[1].Value;
//dbName = m.Groups[2].Value;
userName = m.Groups[3].Value;
password = m.Groups[4].Value;
}
Run Code Online (Sandbox Code Playgroud)
这里有接受的做法吗?
如果我想在C#中对字典进行排序,其顺序由其键及其值确定.类似于其值的降序和具有相同值的降序,按其键降序.似乎很有可能只按键或仅按值排序,但两者都非常烦人.
我能够在.NET中解析XML.现在我至少可以选择XmlTextReader和XDocument.这两者(或框架中包含的任何其他XML解析器)之间是否有任何比较?
也许这可以帮助我做出决定而不必深入尝试它们.
与易于使用相比,XML文件预计相当小,速度和内存使用是一个小问题.:-)
(我将从C#和/或IronPython中使用它们.)
谢谢!
c# ×10
.net ×6
.net-2.0 ×1
activator ×1
ado.net ×1
arrays ×1
constraints ×1
contains ×1
dictionary ×1
equals ×1
generics ×1
linq-to-xml ×1
list ×1
mysql ×1
new-operator ×1
panel ×1
sorting ×1
winforms ×1
xml ×1