小编dha*_*ech的帖子

重命名MainWindow的最佳方法

在Visual Studio 2010中,如果我创建一个WPF应用程序的新项目,则MainWindow子类将Window作为默认的第一个窗口提供.我一直在重命名的步骤MainWindow是:

  • 使用Solution Explorer重命名MainWindow.xaml.
  • 重命名该课程MainWindow.xaml.cs.
  • 从重命名的类旁边出现的"更新对重命名对象的引用的选项"弹出菜单中选择"重命名'MainWindow'到..."选项.
  • 更新StartupUriApp.xaml相应.

有没有更好的办法?:-)

c# wpf xaml visual-studio-2010 visual-studio

5
推荐指数
1
解决办法
1万
查看次数

支持转换为布尔值但仍使用ToString显示WriteLine

当我运行这段代码时,Equation(10, 20)输出到控制台:

public class Equation
{
    public int a;
    public int b;

    public override string ToString()
    { return "Equation(" + a + ", " + b + ")"; }
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(new Equation() { a = 10, b = 20 });

        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想支持Equation在测试中使用的实例,if所以我允许隐式转换为Boolean:

public class Equation
{
    public int a;
    public int b;

    public override string ToString()
    { return "Equation(" + a + …
Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
3
解决办法
393
查看次数

没有参数列表的类定义

F#接受以下内容:

type Abc =
    member this.A = 10
Run Code Online (Sandbox Code Playgroud)

由于没有提供参数列表,因此没有默认构造函数.可以添加构造函数Abc吗?如果没有,可以做些Abc什么?

f#

5
推荐指数
1
解决办法
101
查看次数

非类型数组的类型数组

假设我们有以下内容multi sub

multi sub abc(Int        @array) { say 10, ' ', @array; }

multi sub abc(Array[Int] @array) { say 20, ' ', @array; }

multi sub abc(Str        @array) { say 30, ' ', @array; }

multi sub abc(Array[Str] @array) { say 40, ' ', @array; }
Run Code Online (Sandbox Code Playgroud)

正如这个问题中提到的,使用类型化数组调用它们可能会变得冗长:

abc Array[Int].new([1,2,3]);

abc Array[Array[Int]].new([Array[Int].new([1,2,3]), Array[Int].new([2,3,4])]);
Run Code Online (Sandbox Code Playgroud)

如果可以从文字中推断出类型,这样我们就可以做这样的事情,那就太好了:

abc typed([1,2,3]);

abc typed([[1,2,3],[2,3,4]]);

abc typed(['a', 'b', 'c']);

abc typed([['a', 'b', 'c'], ['b', 'c', 'd']]);
Run Code Online (Sandbox Code Playgroud)

更进一步,让我们添加一个子句来为我们进行类型推断:

multi sub abc(@array) { abc typed(@array); } …
Run Code Online (Sandbox Code Playgroud)

raku

5
推荐指数
1
解决办法
199
查看次数

默认情况下使用数学集合相等设置类

HashSet 不对默认相等操作使用设置相等语义。

var a = new HashSet<int> { 1, 2, 3 };
var b = new HashSet<int> { 3, 2, 1 };
Run Code Online (Sandbox Code Playgroud)

这评估为false

var c = a == b;
Run Code Online (Sandbox Code Playgroud)

而在数学意义上,这两个集合是相等的。我们当然可以使用SetEquals显式来使用集合相等进行比较:

var d = a.SetEquals(b); // true
Run Code Online (Sandbox Code Playgroud)

如果我们创建一组这些集合:

var e = new HashSet<HashSet<int>> { a, b };
Run Code Online (Sandbox Code Playgroud)

结果包含两个元素。我们需要传递一个自定义比较器来获取父集的集语义。

这是HashSet默认情况下实现集合语义的子类。

public sealed class MathSet<T> : HashSet<T>, IEquatable<MathSet<T>>
{
    public override int GetHashCode() => this.Select(elt => elt.GetHashCode()).Sum().GetHashCode();

    public bool Equals(MathSet<T> obj) => SetEquals(obj);

    public override bool Equals(object …
Run Code Online (Sandbox Code Playgroud)

c# hashset

5
推荐指数
0
解决办法
295
查看次数

具有依赖项目的本地开发的 nuget

假设我有项目A和项目B。项目A依赖于项目B。因此A通常会直接引用B的 DLL。

然后我决定将B作为 nuget 包发布。现在,A通过 nuget 而不是本地 DLL引用了B。

这种安排的缺点是,如果我更新B,我需要上传一个新的 nuget 并等待它可用才能从A使用它。

我发现在更新A对B的引用时可以指向本地 nuget 包,这样确实有一点帮助。但是,如果我对B进行更改,我仍然需要执行生成新包并更新A对包的引用的步骤,然后A才能看到更改。通过 pre-nuget 安排,我只需构建BA就会看到更改。

另一种方法是在进行本地开发时删除A对B的 nuget 包的引用并恢复为指向本地 DLL。但是,如果A发布到 github,则在推送到 github 之前必须将引用恢复为 nuget 引用。

在这种情况下,最佳做法是什么?当然,随着 github 和 nuget 的广泛使用,很多人都在处理这类事情。


更新

这个主题在 C# subreddit 上进行了讨论,并指出了一些有趣的方法。

Azure devops -原始评论 - 感谢 …

c# visual-studio nuget

5
推荐指数
1
解决办法
1494
查看次数

一对零或一的关系

介绍

\n

为了测试 IHP,我已将Contoso University ASP.NET Core 教程的部分内容转换为 IHP。

\n

本教程中的这一步显示了数据模型图。根据该页面,我在这个问题中重点关注的部分涉及Instructor和 ,OfficeAssignment其中 和 具有一对零或一的关系。

\n

在此输入图像描述

\n

讲师

\n

C# 中的模型Instructor是:

\n
public class Instructor\n{\n    public int ID { get; set; }\n\n    [Required]\n    [Display(Name = "Last Name")]\n    [StringLength(50)]\n    public string LastName { get; set; }\n\n    [Required]\n    [Column("FirstName")]\n    [Display(Name = "First Name")]\n    [StringLength(50)]\n    public string FirstMidName { get; set; }\n\n    [DataType(DataType.Date)]\n    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]\n    [Display(Name = "Hire Date")]\n    public DateTime …
Run Code Online (Sandbox Code Playgroud)

ihp

5
推荐指数
0
解决办法
149
查看次数

Chez Scheme分配:--program vs --script

考虑一下Chez Scheme代码的这一点:

(进口(chezscheme))

(定义(list-enumerate ls val proc)
  (让循环((ls ls)(返回?#f)(val val))
    (如果(或(空?ls)
            返回?)
        值
        (值调用(lambda()(proc val(car ls)))
          (lambda(返回值)
            (循环(cdr ls)return?val))))))

(定义(list-index ls proc)
  (列表枚举ls
                  0
                  (lambda(i elt)
                    (如果(proc elt)
                        (值#ti)
                        (值#f(+ i 1))))))

(定义n 100000)

(定义数据(iota n))

(时间(列表索引数据(lambda(elt)(= elt(-n 1)))))

运行:

〜$ scheme-脚本〜/ scratch / _list-enumerate-allocation-test-chez-a.sps 
(时间(列表索引数据...))
    没有收藏
    经过3 ms的cpu时间
    实时经过4毫秒
    分配了8个字节

哇,它报告只分配了8个字节。

让我们使用--program选项而不是再次运行它--script

〜$ scheme-程序〜/ scratch / _list-enumerate-allocation-test-chez-a.sps 
(时间(列表索引数据...))
    没有收藏
    经过3 ms的cpu时间
    实时经过3毫秒
    分配了800000字节

Yikes,分配了800000字节。

有什么区别?

埃德

scheme chez-scheme

4
推荐指数
1
解决办法
542
查看次数

int - > int list与int - > IEnumerable <'a>类型不兼容

鉴于:

open System.Linq
Run Code Online (Sandbox Code Playgroud)

这是一个可以接受的表达:

[2; 3; 4].SelectMany(fun n -> { 1..n })
Run Code Online (Sandbox Code Playgroud)

但这不是:

[2; 3; 4].SelectMany(fun n -> [ 1..n ])
Run Code Online (Sandbox Code Playgroud)

错误消息说:

    int -> int list    
is not compatible with type
    int -> System.Collections.Generic.IEnumerable<'a>
Run Code Online (Sandbox Code Playgroud)

F#拒绝表达式,因为函数返回了一个int list.

考虑一下这个类似的C#程序:

using System;
using System.Collections.Generic;
using System.Linq;

namespace SelectManyCs
{
    class Program
    {
        static List<int> Iota(int n)
        {
            var ls = new List<int>();

            for (var i = 0; i < n; i++) ls.Add(i);

            return ls;
        }

        static void Main(string[] args)
        {
            var …
Run Code Online (Sandbox Code Playgroud)

.net c# linq f#

4
推荐指数
1
解决办法
1010
查看次数

检索默认属性名称

以下命令:

Get-ChildItem | Get-Member

System.IO.DirectoryInfo表明 和上当然有很多属性System.IO.FileInfo

但是,当以交互方式运行时,仅显示属性ModeLastWriteTimeLength和。这些也是通过管道传输到或Name时显示的属性。Get-ChildItemFormat-TableOut-GridView

我的问题是,有没有办法以编程方式获取任何给定对象的这些默认属性的名称?即像这样:

Get-DefaultProperties @(Get-ChildItem)[0]
Run Code Online (Sandbox Code Playgroud)

应在数组中返回以下内容:Mode LastWriteTime Length Name

powershell

4
推荐指数
1
解决办法
1524
查看次数

标签 统计

c# ×5

f# ×2

visual-studio ×2

.net ×1

chez-scheme ×1

hashset ×1

ihp ×1

linq ×1

nuget ×1

powershell ×1

raku ×1

scheme ×1

visual-studio-2010 ×1

wpf ×1

xaml ×1