我习惯这样做(来自其他语言):
a = 1, 2, 3;
b = 5, 1, 2;
c = a * b; // c = 5, 2, 6
Run Code Online (Sandbox Code Playgroud)
这需要两个大小相等的列表,并将一个函数应用于其成员,一次一个,以获取结果列表.它可以是一个像乘法(上面)或更复杂的函数一样简单的函数:
c = b>a ? b-a : 0; // c = 4, 0, 0
Run Code Online (Sandbox Code Playgroud)
我可以想到在C#中使用几种不同的方法,但我不确定C#训练程序员是如何做到这一点的.在C#世界中进行此操作的正确方法是什么?
(我要问的唯一部分是在哪里 c = f(a,b)
.我熟悉创建列表和访问它们的元素.)
我一直在尝试CSS列,但我无法休息工作.这是迄今为止的CSS:
#container {
width: 500px;
column-count: 3;
-moz-column-count: 3;
-webkit-column-count: 3;
}
h1 {
break-after: always;
-moz-column-break-after: always;
-webkit-column-break-after: always;
}
Run Code Online (Sandbox Code Playgroud)
这是相关的HTML:
<div id="container">
<h1>The header of the first column</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Maecenas interdum mattis leo, id vehicula sapien ultricies et.</p>
<p>Donec orci nunc, rhoncus ut convallis a, pretium quis elit.</p>
<p>Aenean vulputate vulputate bibendum.</p>
<p>Fusce imperdiet velit quis diam fermentum ut volutpat ipsum convallis.</p>
</div>
Run Code Online (Sandbox Code Playgroud)
不管我做break-after: avoid
,break-after: always
,break-before: …
假设我正在使用类的对象thing
.我得到这个对象的方式有点罗嗦:
BigObjectThing.Uncle.PreferredInputStream.NthRelative(5)
Run Code Online (Sandbox Code Playgroud)
我想看看这thing
是否等于x
或y
或z
.写这个的天真方式可能是:
BigObjectThing.Uncle.PreferredInputStream.NthRelative(5) == x ||
BigObjectThing.Uncle.PreferredInputStream.NthRelative(5) == y ||
BigObjectThing.Uncle.PreferredInputStream.NthRelative(5) == z
Run Code Online (Sandbox Code Playgroud)
在某些语言中,我可以这样写:
BigObjectThing.Uncle.PreferredInputStream.NthRelative(5) == x |= y |= z
Run Code Online (Sandbox Code Playgroud)
但C#不允许这样做.
是否有一种C#-idiomatic方法将此测试编写为单个表达式?
我有一份城市名单.
List<City> cities;
Run Code Online (Sandbox Code Playgroud)
我想按人口排序.我想象的代码是这样的:
cities.Sort(x => x.population);
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我应该如何排序这个清单?
我试图弄清楚C#的匿名函数的语法,对我来说没有意义.为什么这是有效的
Func<string, string> f = x => { return "Hello, world!"; };
Run Code Online (Sandbox Code Playgroud)
但这不是?
Func<string> g = { return "Hello, world!"; };
Run Code Online (Sandbox Code Playgroud) 我正在尝试在控制台应用程序中使用嵌入式资源,但显然控制台应用程序不会自动附带资源文件.如何为我的控制台应用程序创建资源文件?
在Excel VBA中,Range("A1").Value
应返回工作表上范围A1的基础值.但是如果单元格格式化为Accounting,我会得到不同的值.
如何获得单元格的实际基础价值?
工作表
创建一个新文档,在单元格中输入以下值:
正如您所期望的那样,A3会产生TRUE
.现在使用2个小数位将A2的格式更改为Accounting.A2现在读取$ 0.00
,但基础值仍然存在0.00001
,因此A3仍然存在TRUE
.
VBA
制作一个新模块并添加以下功能:
Function f(addr As String)
f = Range(addr).Value
End Function
Run Code Online (Sandbox Code Playgroud)
如您所见,这只是使用对象的Value
方法获取范围的值Range
.
工作表
回到工作表.输入以下值:
A1
并且A2
有相同的基本价值,但B1
并B2
没有,即使它们都计算使用Value
的方法A1
和A2
.
在表达式A3
(=A1=A2
)的访问的实际的基础值A1
和A2
.如何在VBA中访问这些值?
通常,当我抛出一个异常,抓住它,并打印出堆栈跟踪,我去看看那里的异常被抛出调用,导致呼叫,导致通话的是,等回根整个计划.
现在它只显示异常被捕获的调用,而不是它被抛出的位置.我无法弄清楚改变了什么导致了这一点.这是我的计划:
using System;
class foo {
static void Main(string[] args) {
try { f(); }
catch (Exception e) { Console.WriteLine(e.StackTrace); }
}
static void f() { g(); }
static void g() { throw new Exception(); }
}
Run Code Online (Sandbox Code Playgroud)
以下是打印出来的内容:
at foo.Main(String[] args) in C:\Projects\test\root.cs:line 5
Run Code Online (Sandbox Code Playgroud)
我的期望是这样的:
at foo.g...
at foo.f...
at foo.Main...
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我在VBA中有一个生成字符串数组的函数.从另一个VBA函数调用它时工作正常,但从工作表调用时则不行.
以下是它应该如何使用:
=Test()
,然后点击Ctrl-Shift-Enter
使其成为一个数组函数A
,A2应该包含B
,而A3应该包含C
当我实际尝试这个时,它会放入A
数组的所有三个单元格.如何将返回的数据Test
输入到阵列的不同单元格中?
对于那些想要看到它的人来说,这是函数的代码.请记住,从其他函数调用时,该函数可以正常工作.
Function Test() As String()
Dim a(1 To 3) As String
a(1) = "A"
a(2) = "B"
a(3) = "C"
Test = a
End Function
Run Code Online (Sandbox Code Playgroud) Excel的if
函数有三个参数,一个条件,一个if-true值和一个if-false值.Excel是否计算出所有三个参数的值,或者它是否只计算出条件的值和相应的结果?
澄清:我不知道什么是结果的if
会,我想知道它是否计算的所有参数计算函数的结果前的值.
这相当于询问if
函数是否使用惰性或严格评估.例如,以下伪代码:
x = 5;
print x>2 ? "Bigger" : "Smaller" + 1/0
Run Code Online (Sandbox Code Playgroud)
会在完全严格评估的语言中抛出除零异常,因为它会评估1/0
,即使?:
操作员不需要结果.
在惰性评估语言中,?:
操作员在评估x>2
要评估的表达式之前会进行评估.
问题是在Excel中,1/0
产生一个#DIV/0!
可以存在于表达式中的合法值(恰好是).因此,简单地调用=if(true,1,1/0)
不会显示Excel是否正在评估1/0
.