想象一下,我有一个指定一些集合处理程序的接口:
interface ICollectionHandler<T> where T : new() { ... }
Run Code Online (Sandbox Code Playgroud)
然后我有另一个想要一个集合处理程序的类,它将用于各种类型,所以我想做类似的事情:
class SomeClass<T> where T : ICollectionHandler<> ...
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我得到一个错误,说"缺少类型参数".
那么是否有一种方法可以指定T是泛型类型,可以在运行时指定自己的类型参数,还是我将C#推到其(可能是合理的)边界之外?
如果我定义一个简单的函数:
let myConcat a b =
a + "+" + b
Run Code Online (Sandbox Code Playgroud)
然后假设函数是F#中的第一类值,我希望能够myConcat像这样使用:
let result = myConcat "a" (fun () -> "b")
Run Code Online (Sandbox Code Playgroud)
它没有产生字符串"a + b",而是给出了以下错误:
error FS0002: This function takes too many arguments, or is used in a context where a function is not expected
Run Code Online (Sandbox Code Playgroud)
希望我只是让语法错误,但在我看来,函数不能真正用作F#中的值.谁能解释一下这里发生了什么?
编辑 为了进一步澄清我的要求,我可以拥有等效的C#代码:
public string myConcat(string a, string b) { return a + "+" + b; }
Run Code Online (Sandbox Code Playgroud)
如果我想在param b中传递"稍后调用函数",我必须这样做:
public string myConcat(string a, Action<string> b) { return a + "+" + b(); }
Run Code Online (Sandbox Code Playgroud)
或者我可以这样称呼它: …
我们总是使用在特定场景中使用的语言.对于快速原型开发,VB6是一个明显的选择.在具有简单桌面用户界面以及标准和非复杂数据库交互要求的项目中选择了VB6.如果您想使用低级例程开发设备驱动程序,则可能依赖于C或Visual C++.ASP是Web界面开发的标准选择.每种语言都有一个特定的"域名"或"专业化",粗略地说.
使用.NET框架,所有语言都可以互操作,并且可能是一致的.你可以拥有一个包含不同语言模块的项目,但最终都得到了相似的处理(所有这些都被编译为IL).
这是否意味着我们之前的区别不再存在?这种区别并不一定是坏事,而是设计上存在的东西,而不是由于任何约束.显然,.NET框架及其对各种语言的处理有所减弱.
考虑以下功能:
let private actionPixel(pixelColour:Color) =
match (pixelColour.A, pixelColour.R, pixelColour.G, pixelColour.B) with
| (0uy, _, _, _) -> transparent
| (alpha, red, green, blue) when red = blue && red = green && red <> 255uy ->
Color.FromArgb(calculateAlpha (int alpha) (int red), 0, 0, 0)
| _ -> pixelColour
Run Code Online (Sandbox Code Playgroud)
我想要做的是替换| (alpha, red, green, blue) when red = blue && red = green && red <> 255uy ->用| (alpha, value, value, value) when value <> 255uy ->.如果我这样做,我会收到'value' …
我一直在试图创建一个完全是.NET Core的新项目,这个项目可以在不同的环境中运行,但我需要添加许多以前在严格的.NET Framework中工作的项目作为参考(4.5 ).
到目前为止,我能够做的是将.NET 461框架添加到项目json中,
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
],
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Niloosoft.Hunter.ServicesDataAPI": {
"target": "project"
}
}
},
"net461": { }
}
Run Code Online (Sandbox Code Playgroud)
它成功恢复了包,我甚至设法添加了.NET框架引用,但我似乎无法正确使用它们而且我得到了这个错误.
所以,我的问题是,目前是否可以使用我的.NET Framework参考,而无需将预期的框架(因为我需要互操作性)与以下内容交换:
> #if NET45
//specific code for .NET 4.5
> #
Run Code Online (Sandbox Code Playgroud)
需要注意的是,.NETCoreApp不支持我的项目,因此,我确实需要.NET Framework,我只是需要知道我正在尝试做的是否可行.
我的目标是在模式 匹配和c#7.0中的new out变量的帮助下解析和打印传入的变量.然而,该方法抱怨未初始化的局部变量'i'.不知道我哪里出错了?
static void Main(string[] args)
{
var input = "23";
Print(input);
}
static void Print(object o)
{
if (o is int || (o is string && int.TryParse((string)o, out int i)))
Console.WriteLine(i.ToString());
}
Run Code Online (Sandbox Code Playgroud) 我正在研究让教师评论论文的软件,我需要找出教师是否已经连续3篇论文给出相同的成绩.基本上我有一个成绩列表:
80,81,90,90,90,100,85,86,86,79,95,95,95
我需要在这个列表中识别90和95(它们各自连续给出3次).
PS - 对于那些一直将我的帖子标记为"家庭作业"的人来说,仅仅因为我正在处理学生和成绩并不意味着这是一个课堂作业.吉米尼.
让我们假设我有一个父类和一个子类,我重载了一个父类方法.
我正在将子类对象分配给PARENT CLASS引用变量.我知道,当我尝试调用父类方法时,它将调用子类方法.
但是背后的原因是什么?什么是程序控制流程?堆里面发生了什么?
是否可以编写此属性:
string Error { get; }
Run Code Online (Sandbox Code Playgroud)
在表达式bodied syntax(=>)中,
例如:
string Title
{
get
{
return title;
}
}
Run Code Online (Sandbox Code Playgroud)
变为:
string Title => title;
Run Code Online (Sandbox Code Playgroud) 我正在创建一个电子邮件日志来报告我的应用程序的活动.
该表正在运行finr但是当输出数百条记录时,很难阅读.
这是我现有的代码(我通过ac#datatable循环获取记录)
foreach (task_creditcases item in creditCases)
{
sb.Append("<tr>");
// Document Name
sb.Append("<td>" + item.c_Id + "</td>");
sb.Append("<td>" + item.c_Name + "</td>");
sb.Append("<td>" + "Credit Case" + "</td>");
sb.Append("<td>" + "Credit Case" + "</td>");
sb.Append("<td>" + item.c_EquationCustomerNumber + "</td>");
sb.Append("<td>" + item.c_AdditionalInfo + "</td>");
sb.Append("<td>" + Convert.ToDateTime(item.c_Close_Date__c).ToString("dd/MM/yyyy") + "</td>");
sb.Append("<td>" + item.c_ImagingDocument + "</td>");
sb.Append("<td>" + item.c_ContentType + "</td>");
sb.Append("<td>" + item.c_Status__c + "</td>");
sb.Append("<td>" + item.c_Document_Type__c + "</td>");
sb.Append("<td>" + item.c_ImagingDSXDirectory + "</td>");
sb.Append("<td>" + item.c_ImagingDocument + "</td>"); …Run Code Online (Sandbox Code Playgroud) 此代码有效:
var Input = File.ReadAllLines(FilePath).Select(line => line.Split(' ')).ToArray();
Run Code Online (Sandbox Code Playgroud)
此代码不起作用:
var Input = File.ReadAllLines(FilePath).Select(line => line.Split(' ', StringSplitOptions.RemoveEmptyEntries)).ToArray();
Run Code Online (Sandbox Code Playgroud)
我收到错误:"无法从'System.StringSplitOptions'转换为'char'.我试图通过这个添加删除空元素.我该怎么做?
我有这个代码:
for (int i = 0; i < Maps.Count; i++)
{
string startTag = FirstTags[i];
string endTag = LastTags[i];
startIndex = Maps[i].IndexOf(startTag);
while (startIndex > 0)
{
endIndex = Maps[i].IndexOf(endTag, startIndex);
if (endIndex == -1)
{
break;
}
string t = Maps[i].Substring(startIndex, endIndex - startIndex + endTag.Length);
if (i == 0)
{
imagesSatelliteUrls.Add(t);
}
position = endIndex + endTag.Length;
startIndex = Maps[i].IndexOf(startTag, position);
}
imagesSatelliteUrls = imagesSatelliteUrls.OrderBy(q => q).ToList();
Run Code Online (Sandbox Code Playgroud)
所以第一次迭代/循环i = 0然后它进入一个while循环.然后我做了:
if (i == 0)
{
imagesSatelliteUrls.Add(t);
}
Run Code Online (Sandbox Code Playgroud)
所以最终imagesSatelliteUrls包含9个文件.我想在imagesSatelliteUrls …
c# ×9
f# ×2
.net ×1
asp.net-core ×1
c#-7.0 ×1
css ×1
datatable ×1
guard-clause ×1
html ×1
html-table ×1
idioms ×1
inheritance ×1
io ×1
list ×1
oop ×1
project.json ×1
winforms ×1