小编ja7*_*a72的帖子

BinaryExpression到Lambda

这可能是一些人所熟悉的.我有一个包装类Ex,它用一堆隐式转换和运算符包装表达式树.这是简化版

public class Ex 
{
    Expression expr;

    public Ex(Expression expr)
    {
        this.expr = expr;
    }
    public static implicit operator Expression(Ex rhs) { return rhs.expr; }
    public static implicit operator Ex(double value) 
    { return new Ex(Expression.Constant(value, typeof(double))); }
    public static implicit operator Ex(string x) 
    { return new Ex(Expression.Parameter(typeof(double), x)); }
    public static Ex operator +(Ex left, Ex right)
    {
        return new Ex(Expression.Add(left, right));
    }
    public static Ex operator -(Ex rhs)
    {
        return new Ex(Expression.Negate(rhs));
    }
    public static Ex operator …
Run Code Online (Sandbox Code Playgroud)

c# lambda expression-trees

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

将数组放入 class.property

我有一个具有以下属性的类:

Dim pBonds() as string

Private Property Get Bonds() As String
    Bonds = pBonds
End Property

Private Property Get Bond(index As Long) As String
    Bond = pBonds(index)
End Property

Private Property Let Bond(index As Long, strValue As String)
    If index > UBound(pBonds) Then ReDim Preserve pBonds(index)
    pBond(index) = strValue
End Property
Run Code Online (Sandbox Code Playgroud)

当我尝试时:

Set o = New CBondBasket
   For k = LBound(arr) To UBound(arr)
       o.Bond(k) = arr(k)
   Next k
Run Code Online (Sandbox Code Playgroud)

我收到错误Method or data member not found

知道那是从哪里来的吗?


做出了改变

现在将它们标记为公共并添加初始化和 byval (给我另一个错误,没有它) …

vba

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

我该如何实例化这个类?

用泛型来考虑这个声明:

public class BaseNode<TNode> where TNode : BaseNode<TNode>
{
    public class Node : BaseNode<Node>
    {
        public Node() { }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法Node从基类外部创建类的实例?我之前使用过这种模式,但总是把派生类留在基类之外.

如果没有编译器错误,您如何编写以下内容?

var obj = new BaseNode<Node>.Node(); 
// error CS0246: The type or namespace name 'Node' could not be found
Run Code Online (Sandbox Code Playgroud)

我创建了一个不可实例化的类吗?它可以通过反射初始化吗?

c# instantiation

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

给定一个字符串数组什么是随机排序它们的最简单方法?

我想出的是:

RandomSort()
{
  string[] list = { "Alpha", "Beta", "Gamma", ... }
  Random rnd = new Random();
  string[] list2 = list.OrderBy((x) => rnd.NextDouble()).ToArray();
}
Run Code Online (Sandbox Code Playgroud)

有没有其他方式,也许使用一个Dictionary或什么?谢谢.

c# sorting random shuffle

2
推荐指数
1
解决办法
266
查看次数

我可以使用LINQ以数字方式添加两个数组的值吗?

如果我有两个数值数组,例如double[] a, b,我想生成第三个数组,每个元素都是添加的a,b我可以用循环来做

double[] a, b, c
// fill in a, b and initialize c
for(int i=0; i<c.Length; i++)
{
    c[i] = a[i] + b[i];
}
Run Code Online (Sandbox Code Playgroud)

所以问题是; 有没有办法用LINQ而不是循环?

PS.假设我已经有了二元运算符Func<double,double,doube> add = (x,y)=>x+y;

c# linq vector operators

2
推荐指数
1
解决办法
2153
查看次数

使用BIND(C,NAME ="name")属性时,为什么不导出我的fortran函数

我习惯使用以下语法

    subroutine CalcA(A,N)
    !DEC$ ATTRIBUTES DLLEXPORT :: CALCA
    !DEC$ ATTRIBUTES ALIAS:'CalcA' :: CalcA
    IMPLICIT NONE        
    ...
    end subroutine CalcA
Run Code Online (Sandbox Code Playgroud)

它在.dll中生成导出的函数 DependencyWalker

所以现在我ISO_C_BINDING用以下代码尝试新的

    subroutine CalcA(A,N) BIND(C, NAME="CalcA")
    USE, INTRINSIC :: ISO_C_BINDING
    IMPLICIT NONE        
    ...        
    end subroutine CalcA
Run Code Online (Sandbox Code Playgroud)

但是没有创建导出功能

DependencyWalker

那我在这里错过了什么?新的如何iso_c_binding取代已弃用的!DEC$ ATTRIBUTE DLLEXPORT声明?

PS.我通过VS2010在Win7-64平台上使用英特尔Fortran XE 2013.

interop fortran fortran-iso-c-binding intel-fortran

2
推荐指数
1
解决办法
1343
查看次数

如果Excel中的单元格包含数组公式(如`= {1,2,3}`),我可以使用VBA提取数组的元素

就像标题所说,一个单元格A1包含公式={1,2,3},它是一个单元格的有效输入,我可以使用VBA来获取数组的元素.

请注意,Range("A1").Value返回值1,但Range("A1").Formula返回字符串={1,2,3}.因此,我能想到的唯一方法是解析公式并将值与,(如CSV行)分开.

在这种情况下,还有其他方法可以在vba中返回值数组.我甚至试图将它作为一个数组读入一个变体,v=Range("A1:A2").Value2但仅v(1)包含1.

arrays excel vba excel-vba

2
推荐指数
1
解决办法
482
查看次数

如何在TextBox上绘制

我有一个带文本框的winform,我想在它上面绘制一些GDI图形。文本框没有Paint()要挂钩的事件,因此我认为所有事件都必须在窗体的Paint事件中发生。作为测试,我使用以下命令从原点到文本框内的位置绘制一个矩形:

    private void FindForm_Paint(object sender, PaintEventArgs e)
    {
        using (Pen pen = new Pen(Color.Blue))
        {
            e.Graphics.DrawRectangle(pen, 0, 0, point.X, point.Y);
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行时,先完成绘制,然后在我的线条上方呈现文本框。我想在渲染文本框后绘制线条。

PS。我尚未对该Form.SetStyle()功能的表单进行任何设置。

c# textbox winforms

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

拆分字符串并获得所需的部分

有没有办法在最后一个"_"之后得到字符串的部分;

string1 = "A_110_23_09_ABC"

result1 = "ABC"
Run Code Online (Sandbox Code Playgroud)
string2 = "A_110_23_09_ABC_555"

result2 = "555"
Run Code Online (Sandbox Code Playgroud)

c# string split

1
推荐指数
2
解决办法
54
查看次数

在8个字符处将一个`-`添加到一个字符串,然后再在4处添加一个字符串?

过去一小时我一直试图这样做,这让我疯了.我正在尝试使用正确的格式(使用破折号)获取一个Minecraft UUID,但我使用的API以常规格式提供它.

是)我有的: 7a4730f8f948471dbc77f6f71a250f87

适当的格式: 7a4730f8-f948-471d-bc77-f6f71a250f87

我将如何格式化这样的字符串?

c# guid

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

Double 不使用 Math.Round 函数进行舍入?

我正在创建新模型,该模型的属性之一是 BruttoPrice (可为 null-double 类型),并且我想为该属性分配我的 Item3 (可为 null-double 类型)值,但四舍五入到小数点后两位 - 所以我使用 Math .Round 函数但不起作用

将 item3 分配给 bruttoPrice

。

var model = new Model
            {
                BruttoPrice = Math.Round(val.Item3 ?? 0, 2),
            };
Run Code Online (Sandbox Code Playgroud)

我的模型输出

。

.net math rounding

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

我可以对这样的代码使用模式匹配吗(在泛型类型上)

我想使用模式匹配来替换多个if语句,如下所示的方法Select<T>()。我想使用switch()上的声明typeof(T)

static class Program
{
    static void Main(string[] args)
    {
        var doc = new Document();
        IWire select = doc.Select<IWire>();
    }

    public static T Select<T>(this Document document) where T : class, IGeneric
    {
        var t = typeof(T);
        if (t.IsAssignableTo(typeof(IWire)))
        {
            return document.SelectEntity(EntityType.Wire) as T;
        }
        if (t.IsAssignableTo(typeof(ISolid)))
        {
            return document.SelectEntity(EntityType.Solid) as T;
        }
        if (t.IsAssignableTo(typeof(ISurface)))
        {
            return document.SelectEntity(EntityType.Surface) as T;
        }
        // imagine a lot of if statements here
        return null;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# generics pattern-matching c#-7.0

0
推荐指数
1
解决办法
8245
查看次数

使用传统的 foreach 循环替换 C# 中 List 中特定索引处的项目

这是我的代码来解决这个问题。 错误详细信息:索引超出范围。必须为非负数且小于集合的大小。

List<string> mylist = new List<string>();
mylist.Add("Val1");
mylist.Add("Val2");
mylist.Add("Val3");

int i = 1;
int totalLenngth = mylist.Count;
foreach (var item in mylist)
{
    if (i == totalLenngth) {
      //mylist.Remove(bro);
        mylist.RemoveAt(i);
        mylist.Add("Val4");
    }
    i++;
}
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
228
查看次数