假设我有一个Type电话type.
我想确定我是否可以使用我的类型执行此操作(实际上不对每种类型执行此操作):
如果type是,System.Windows.Point那么我可以这样做:
Point point1 = new Point();
Run Code Online (Sandbox Code Playgroud)
但是,如果type是,System.Environment那么这将不会飞:
Environment environment1 = new Environment(); //wrong
Run Code Online (Sandbox Code Playgroud)
因此,如果我遍历程序集中的每个可见类型,如何跳过将无法创建第二个实例的所有类型?我对反思很陌生,所以我的术语还不是很好.希望我在这里尝试做的很清楚.
我之前曾问过这个问题,这个问题得到了解答,但是有人给出了一个建议,可以帮助我防止在我前进时犯下类似的错误.
建议是我从下到上而不是从上到下构建语法树.有人可以提供一个小型演示或链接,显示我将如何从头开始这样做?
这是代码:
var root = (CompilationUnitSyntax)document.GetSyntaxRoot();
// Add the namespace
var namespaceAnnotation = new SyntaxAnnotation();
root = root.WithMembers(
Syntax.NamespaceDeclaration(
Syntax.ParseName("ACO"))
.NormalizeWhitespace()
.WithAdditionalAnnotations(namespaceAnnotation));
document = document.UpdateSyntaxRoot(root);
// Add a class to the newly created namespace, and update the document
var namespaceNode = (NamespaceDeclarationSyntax)root
.GetAnnotatedNodesAndTokens(namespaceAnnotation)
.Single()
.AsNode();
var classAnnotation = new SyntaxAnnotation();
var baseTypeName = Syntax.ParseTypeName("System.Windows.Forms.Form");
SyntaxTokenList syntaxTokenList = new SyntaxTokenList()
{
Syntax.Token(SyntaxKind.PublicKeyword)
};
var newNamespaceNode = namespaceNode
.WithMembers(
Syntax.List<MemberDeclarationSyntax>(
Syntax.ClassDeclaration("MainForm")
.WithAdditionalAnnotations(classAnnotation)
.AddBaseListTypes(baseTypeName)
.WithModifiers(Syntax.Token(SyntaxKind.PublicKeyword))));
root = root.ReplaceNode(namespaceNode, newNamespaceNode).NormalizeWhitespace();
document = …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何获得矩阵的所有对角线.例如,假设我有以下矩阵:A < - 矩阵(1:16,4)
使用该diag(A)函数将返回
[1] 1 6 11 16
Run Code Online (Sandbox Code Playgroud)
除了主要的对角线,我想要一个上面和下面所有对角线的列表.
5 10 15
2 7 12
9 14
3 8
4
13
Run Code Online (Sandbox Code Playgroud)
我找到了以下链接/sf/answers/913480571/,它给我直接在主要的上方和下方的对角线,但我似乎无法弄清楚如何扩展代码以获得任何大小的其余部分矩阵.我尝试了两个嵌套for循环,因为看起来某种矩阵下标的递增会产生我正在寻找的结果.我尝试在for循环中使用ncol(A),nrow(A),但似乎无法找出正确的组合.另外我知道for循环通常在R中不受欢迎.
给出的代码是:
diag(A[-4,-1])
diag(A[-1,-4])
Run Code Online (Sandbox Code Playgroud)
它返回了两个对角线,包括上部和下部
当然这是一个方阵,并不是我想要执行的所有矩阵都是正方形的.如有必要,可以使用NA填充非正方形区域.我需要的答案可能是页面上的其他答案之一,但最初的问题涉及手段,总和等,这增加了一层复杂性,超出了我的目的.我觉得解决这个问题的方法非常简单,但它并没有发生在我身上.我也很惊讶我无法在任何地方找到这个问题,这似乎是一个很常见的问题.也许我不知道这个问题的正确术语.
首先,我在http://swigartconsulting.blogs.com/tech_blender/2005/08/how_to_move_the.html找到了此代码:
public class Win32
{
[DllImport("User32.Dll")]
public static extern long SetCursorPos(int x, int y);
[DllImport("User32.Dll")]
public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int x;
public int y;
}
}
Run Code Online (Sandbox Code Playgroud)
将以下代码粘贴到按钮的click eventhandler中:
Win32.POINT p = new Win32.POINT();
p.x = button1.Left + (button1.Width / 2);
p.y = button1.Top + (button1.Height / 2);
Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);
Run Code Online (Sandbox Code Playgroud)
这会将鼠标指针移动到按钮的中心.
这段代码效果很好,但我似乎无法弄清楚如何扩展它.假设我有一个Internet浏览器(嵌入在windows窗体中)打开一个网页(一些我手头不知道的随机页面),里面有一个下拉列表框.我已修改上面的代码,将光标移动到下拉列表框(使用下面显示的鼠标单击方法将列表向下拖放),并在列表中上下移动,突出显示每个项目作为鼠标指针过去,但对于我的生活,我无法弄清楚如何实际让鼠标点击当前选定的项目来保持选择.我正在这样做的方式现在下拉列表框只是关闭,选择不会改变.我正在使用以下代码进行鼠标单击(这会使列表下拉):
private static void MouseClick(int x, int y, IntPtr handle) //handle for the browser …Run Code Online (Sandbox Code Playgroud) 我发现这篇关于使用带有正则表达式的活动模式的有用文章:http: //www.markhneedham.com/blog/2009/05/10/f-regular-expressionsactive-patterns/
文章中使用的原始代码段是:
open System.Text.RegularExpressions
let (|Match|_|) pattern input =
let m = Regex.Match(input, pattern) in
if m.Success then Some (List.tl [ for g in m.Groups -> g.Value ]) else None
let ContainsUrl value =
match value with
| Match "(http:\/\/\S+)" result -> Some(result.Head)
| _ -> None
Run Code Online (Sandbox Code Playgroud)
如果找到至少一个网址以及该网址是什么(如果我正确理解了该网址片段),会告诉您
然后在评论部分Joel建议这个修改:
替代方案,因为给定的组可能是也可能不是成功匹配:
Run Code Online (Sandbox Code Playgroud)List.tail [ for g in m.Groups -> if g.Success then Some g.Value else None ]或者,您可以为组添加标签,并希望按名称访问它们:
Run Code Online (Sandbox Code Playgroud)(re.GetGroupNames() |> Seq.map (fun n -> (n, m.Groups.[n])) |> Seq.filter (fun …
我试图通过从头开始构建现有但简单的应用程序来学习Roslyn,这似乎是一种有效的方法来学习它.无论如何,我有以下代码:
var root = (CompilationUnitSyntax)document.GetSyntaxRoot();
// Add the namespace
var namespaceAnnotation = new SyntaxAnnotation();
root = root.WithMembers(
Syntax.NamespaceDeclaration(
Syntax.ParseName("ACO"))
.NormalizeWhitespace()
.WithAdditionalAnnotations(namespaceAnnotation));
document = document.UpdateSyntaxRoot(root);
// Add a class to the newly created namespace, and update the document
var namespaceNode = (NamespaceDeclarationSyntax)root
.GetAnnotatedNodesAndTokens(namespaceAnnotation)
.Single()
.AsNode();
var classAnnotation = new SyntaxAnnotation();
var baseTypeName = Syntax.ParseTypeName("System.Windows.Forms.Form");
SyntaxTokenList syntaxTokenList = new SyntaxTokenList()
{
Syntax.Token(SyntaxKind.PublicKeyword)
};
var newNamespaceNode = namespaceNode
.WithMembers(
Syntax.List<MemberDeclarationSyntax>(
Syntax.ClassDeclaration("MainForm")
.WithAdditionalAnnotations(classAnnotation)
.AddBaseListTypes(baseTypeName)
.WithModifiers(Syntax.Token(SyntaxKind.PublicKeyword))));
root = root.ReplaceNode(namespaceNode, newNamespaceNode).NormalizeWhitespace();
document = document.UpdateSyntaxRoot(root);
var attributes …Run Code Online (Sandbox Code Playgroud) 我有这行代码,它给出了主题行中陈述的错误:
type trie<'k,'a> = TNode of ('a option * Map<'k,('k,'a) trie>)
Run Code Online (Sandbox Code Playgroud)
我试过插入"当k:比较"时,我想到的每一种可能的方式都无济于事.我只能使用一个通用参数找到这个例子,而不是两个.
提前致谢,
短发
我确信这一定非常简单,但我似乎无法使其发挥作用.假设我有一个.fsx脚本文件,并希望以编程方式执行它.我猜想有人必须在某个时候写过关于此的博客,但我似乎无法找到一个执行我简单场景的例子.基本上,我想以编程方式复制右键单击.fsx文件并选择"使用F#Interactive运行..."时发生的情况.
我有一个存储在列表中的字符向量列表,如下所示:
basket1 <- c("Apple", "Orange", "Banana", "Apple", "Apple", "Grape")
basket2 <- c("Grape", "Grape", "Grape", "Grape")
basket3 <- c("Kiwi", "Apple", "Cantaloupe", "Banana")
basket4 <- c("Strawberry")
basket5 <- c("Grape", "Grape", "Grape")
FruitBasketList <- list(basket1, basket2, basket3, basket4, basket5)
Run Code Online (Sandbox Code Playgroud)
我想把它FruitBasketList变成一个数据框,每个水果的数量与它来自的篮子相匹配.我遇到的主要问题是每个向量中可能存在数千种不同的"结果",其中很多都会出现不止一次.
这是我想要的结果所需的数据框:
Basket Apple Orange Banana Grape Kiwi Cantaloupe Strawberry
basket1 3 1 1 1 0 0 0
basket2 0 0 0 4 0 0 0
basket3 1 0 1 0 1 1 0
basket4 0 0 0 0 0 0 1 …Run Code Online (Sandbox Code Playgroud) 我试图将此C#代码转换为F#:
double[,] matrix;
public Matrix(int rows, int cols)
{
this.matrix = new double[rows, cols];
}
public double this[int row, int col]
{
get
{
return this.matrix[row, col];
}
set
{
this.matrix[row, col] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我最大的问题是在F#中创建索引器.网络上的任何地方我找不到任何可以应用的东西.我包括了该类的其他几个部分,以防将索引器合并到Matrix类型中并不明显.所以一个好的答案将包括如何从这里的三个部分中制作一个完整的类型,以及可能需要的任何其他东西.另外,我知道F#powerpack中的矩阵类型,但是我试图通过将我理解的C#项目转换为F#来学习F#.
提前致谢,
短发