我创建了一个实现INotifyPropertyChanged接口的基类.此类还包含一个通用函数,SetProperty用于设置任何属性的值并在PropertyChanged必要时引发事件.
Public Class BaseClass
Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Function SetProperty(Of T)(ByRef storage As T, value As T, <CallerMemberName> Optional ByVal propertyName As String = Nothing) As Boolean
If Object.Equals(storage, value) Then
Return False
End If
storage = value
Me.OnPropertyChanged(propertyName)
Return True
End Function
Protected Overridable Sub OnPropertyChanged(<CallerMemberName> Optional ByVal propertyName As String = Nothing)
If String.IsNullOrEmpty(propertyName) Then
Throw New ArgumentNullException(NameOf(propertyName))
End If
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub …Run Code Online (Sandbox Code Playgroud) 今天我偶然发现了VB.net If()语句的奇怪行为.也许你可以解释为什么它像它一样工作,或者你可以确认它是一个bug.
所以,我有一个带有"TestTable"表的SQL数据库,其中一个int列"NullableColumn"可以包含NULL.我想宣读本专栏的内容.
所以我声明了一个类型的变量Nullable(Of Integer),打开一个SqlClient.SqlDataReader"SELECT NullableColumn FROM TestTable"并使用以下代码来获取该列的内容:
Dim content as Nullable(Of Integer)
...
Using reader as SqlClient.SqlDataReader = ...
content = If(reader.IsDBNull(reader.GetOrdinal("NullableColumn")), Nothing, reader.GetInt32(reader.GetOrdinal("NullableColumn")))
End Using
Run Code Online (Sandbox Code Playgroud)
但在那之后,我的变量content的值为0,而不是Nothing我预期的那样.
调试时一切看起来都不错,所以
reader.GetOrdinal("NullableColumn") 提供此列的正确序号位置(为0)reader.IsDBNull(0)并且reader.IsDBNull(reader.GetOrdinal("NullableColumn"))传递True,因为此列的内容确实是NULLIf(1=2, Nothing, "Not Nothing") 提供字符串"没什么"If(1=1, Nothing, "Not Nothing") 提供 Nothingreader.GetInt32(reader.GetOrdinal("NullableColumn")) 抛出错误,因为NULL无法转换为 Integer那么,为什么我的变量的值为0?
出于自我教育目的,我试图找到一种方法来创建一个自己的高度图.我google了一下,发现了一个创建伪随机数的函数.
public static float Noise(int x)
{
x = (x << 13) ^ x;
return (1f - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7FFFFFFF) / 1073741824.0f);
}
Run Code Online (Sandbox Code Playgroud)
由于我选择的语言是VB.net,我将此函数翻译为:
Private Function Noise(ByVal x As Integer) As Double
x = (x << 13) Xor x
Return (1.0R - ((x * (x * x * 15731.0R + 789221.0R) + 1376312589.0R) And &H7FFFFFFF) / 1073741824.0R)
End Function
Run Code Online (Sandbox Code Playgroud)
如果我使用C#版本,我会得到x值从1到100的结果.如果我使用VB.net版本,我得到x <6但OverFlowExceptionx = 6的值.当我拆开这个功能的部分时,我发现了溢出的部分
(x * x * 15731.0R) …Run Code Online (Sandbox Code Playgroud) 我对html,css,javascript和传单非常陌生。
我尝试创建一个具有多个选项卡的html文件,并且在每个选项卡上我都希望显示一张不同的地图(左侧),其中包含有关该地图所显示内容的信息(右侧)。
我在如何做制表符部分上找到了此链接,并且在地图部分上已经有一个可用的示例,但是html文件中只有一个地图。
现在,我试图将这两件事结合起来,但是只有一个地图可以正常工作(第一个),其他地图仅显示灰色,左上角可能只有一小块地图。但是,即使我尝试平移“破碎”的地图,也只会显示部分图块。
有人可以给我提示如何做吗?甚至可以在带有传单的html文件上包含多个地图吗?
到目前为止,这是我的html文件,包括html,css和javascript。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css" integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA==" crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js" integrity="sha512-nMMmRyTVoLYqjP9hrbed9S+FzjZHW5gY1TWCHA5ckwXZBadntCNs8kEqAWdrb9O7rxbCaA4lKTIWjDXZxflOcA==" crossorigin=""></script>
<style>
/* Set height of body and the document to 100% to enable "full page tabs" */
body, html {
height: 100%;
margin: 0;
font-family: sans-serif;
}
/* Style tab links */
.tablink {
background-color: #9f9f9f;
color: black;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 5px;
font-size: 16px;
width: 33.33%;
}
.tablink:hover …Run Code Online (Sandbox Code Playgroud) 我只是偶然发现了一个问题,我花了几个小时才找到原因。
我声明了一个类变量,ReadOnly因为我想在类的构造函数中设置它的值(以下所有代码都是示例代码,所以它可能没有多大意义)。
Private ReadOnly _content as String
Public Sub New(content As String)
_content = content
End Sub
Public ReadOnly Property Content As String
Get
Return _content
End Get
End Property
Run Code Online (Sandbox Code Playgroud)
经过一些编码后,我发现我想根据这个变量的值做其他事情,所以我将代码更改为:
Private ReadOnly _content as String
Public Sub New(content As String)
Me.Content = content
End Sub
Public Property Content As String
Get
Return _content
End Get
Private Set(value As String)
If Me.SetValue(Of String)(_content, value) AndAlso (_content = "foo") Then
'other stuff
End If
End Set
End Property
Private …Run Code Online (Sandbox Code Playgroud) 我一直有这样的印象:在 VB.NET 中声明变量会自动将该变量设置为其数据类型的默认值(与 C# 不同)。
所以,之后
Dim intValue As Integer intValue是 0Dim dateValue As Date dateValue是 1/1/0001Dim stringValue As String stringValue是NothingDim strValue As Point strValue是 (0; 0)等等。
但现在我在循环内声明了一个变量,并且令我惊讶的是,尽管重复声明,但该变量仍保留其值。所以,
For index As Integer = 1 To 10
Dim test As Integer
test += 1
Console.WriteLine(test)
Next index
Run Code Online (Sandbox Code Playgroud)
输出从 1 到 10 的数字,并且不输出数字 1 的十倍。
有人可以解释一下为什么吗?这是一个错误还是应该像这样工作?