我试图了解移动编程,然后我遇到了这个代码,它是一个应该将字符转换为数字的方法。代码正在运行,但我的问题是“?”的目的是什么?在int之后。
static int? Translate(char c)
{
if ("ABC".Contains(c))
return 2;
else if ("DEF".Contains(c))
return 3;
else if ("GHI".Contains(c))
return 4;
else if ("JKL".Contains(c))
return 5;
else if ("MNO".Contains(c))
return 6;
else if ("PQRS".Contains(c))
return 7;
else if ("TUV".Contains(c))
return 8;
else if ("WXYZ".Contains(c))
return 9;
return null;
}
答案 0 :(得分:3)
null
是?
类的语法糖 - 在您的情况下Nullable<>
实际上是int?
。
这个类的目的是允许值类型表示Nullable<Int32>
值,因为它们通常不能(它们是C ++术语中的“堆栈”对象)。它涉及拳击,但是只在需要时才使用它们,与之相关的性能成本。
另请注意,在您的情况下将其设置为null
(通过null
,或仅将其设置为正常分配)实际上并未将引用设置为return
。这是更多编译器魔法,实际上将其设置为null
,new int?()
属性设置为HasValue
的实例。
答案 1 :(得分:0)
您可以通过两种方式表达值类型可以为空:
可空,可空等
INT?加倍?
问号只是简写。
答案 2 :(得分:0)
s2=raw_input('Enter the s2: ') #read the string from user
x=len(s2)
y=x-1
s1=[20] #another array to hold the new string
j=0
if len(s2)%2==0: #if length of string is even
for i in range(0,y/2-1): #do until i<=half of string length
if s2[i]==s2[y-i]:
s1[j]=s2[i]
j=j+1 #if characters are equal then copy the character to array
elif s2[i]!=s2[y-i]:
s1[j]=s2[i]
j=j+1
s1[j]=s2[y-i]
j=j+1 #if characetrs are not equal then copy both the letters
elif len(s2)%2!=0: #if length of string is odd
for i in range(0,y/2-1):
if s2[i]==s2[y-i]:
s1[j]=s2[i]
j=j+1
elif s2[i]!=s2[y-i]:
s1[j]=s2[i]
j=j+1
s1[j]=s2[y-i]
j=j+1 #do same as above
z=2*len(s1) #get 2xlength of string
if z%2==0:
for i in range(0,z-1):
if i<=z/2:
s1[z-i]=s1[i] #copy first half to the second half of string to create the pallindrome.
if z%2!=0:
for i in range(0,z-1):
if i<=(z/2)-1:
s1[z-i]=s1[i]
print s1 #print pallindrome
只是int?
的简写。可以为空的数据类型可以表示其类型(本例为nullable<int>
)或int
。 32位整数代表任何数字是以下范围:-2,147,483,648到2,147,483,647;但可以为空的整数(null
)可以是该范围内的任何内容,或 int?
。